社区讨论

请求加强数据

P1220关路灯参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lz895yqr
此快照首次捕获于
2024/07/30 18:05
2 年前
此快照最后确认于
2024/07/30 19:36
2 年前
查看原帖
不是,为什么代码连样例都过不去但是AC了啊??
涉案代码:
CPP
#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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...