请求加强数据
  • 板块P1220 关路灯
  • 楼主Tou_ch
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/30 18:03
  • 上次更新2024/7/30 19:36:48
查看原帖
请求加强数据
768239
Tou_ch楼主2024/7/30 18:03

不是,为什么代码连样例都过不去但是AC了啊??

提交记录

涉案代码:

#include <bits/stdc++.h>

using namespace std;

#define fir first
#define sec second

int n, m, presum[60], f[60][60][2];
pair<int,int> h[60];

inline int sumof(int l, int r) {
    if(l > r) swap(l, r);
	return max(0,presum[r] - presum[l-1]);
}

inline int disof(int l, int r) {
	if(l > r) swap(l, r);
	return (h[r].fir - h[l].fir);
}

int main() {
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; i++) scanf("%d%d", &h[i].fir, &h[i].sec),h[m].sec=0,presum[i] = presum[i-1] + h[i].sec;
	memset(f, 0x3f, sizeof f);
	if(m < n) f[m][m+1][1] = (h[m+1].fir - h[m].fir) * (presum[n] - h[m].sec);
	if(m > 1) f[m-1][m][0] = (h[m].fir - h[m-1].fir) * (presum[n] - h[m].sec);
	for(int l = 3; l <= n; l++) {
		for(int i = 1; i <= n - l + 1; i++) {
			int j = i + l - 1;
			f[i][j][0] = min(f[i+1][j][0] + (disof(i, i + 1) * (sumof(1,i) + sumof(j + 1, n))),
							f[i+1][j][1] + (disof(i, j) * (sumof(1,i) + sumof(j + 1, n))));
			f[i][j][1] = min(f[i][j-1][1] + (disof(j, j-1) * (sumof(1,i-1) + sumof(j, n))),
							f[i][j-1][0] + (disof(i, j) * (sumof(1,i-1) + sumof(j, n))));
		}
	}
	printf("%d\n", min(f[1][n][0], f[1][n][1]));
	return 0;
}
2024/7/30 18:03
加载中...