社区讨论
请求加强数据
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 条回复,欢迎继续交流。
正在加载回复...