社区讨论
dp 80pts 求助
P8816[CSP-J 2022] 上升点列参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @lo7n6vpe
- 此快照首次捕获于
- 2023/10/27 04:33 2 年前
- 此快照最后确认于
- 2023/10/27 04:33 2 年前
不明白哪里错了 QwQ,求大佬帮忙看看
CPP#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 510, K = 110;
struct Dot {
int x, y;
} d[N];
int n, k, ans;
int f[N][K];
bool cmp(Dot a, Dot b) {
if (a.x != b.x) return a.x < b.x;
return a.y < b.y;
}
int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i) scanf("%d%d", &d[i].x, &d[i].y);
sort(d+1, d+n+1, cmp);
// for (int i = 1; i <= n; ++i) printf("%d %d\n", d[i].x, d[i].y);
for (int i = 0; i <= k; ++i) f[1][i] = i+1;
for (int i = 2; i <= n; ++i) {
for (int t = 1; t < i; ++t) {
if (d[t].y > d[i].y) continue;
int p = d[i].x - d[t].x + d[i].y - d[t].y - 1;
for (int j = 0; j <= k; ++j) {
if (j >= p) f[i][j] = max(f[i][j], f[t][j-p]+p+1);
else f[i][j] = max(f[i][j], j+1);
}
}
}
for (int i = 1; i <= n; ++i) ans = max(ans, f[i][k]);
printf("%d\n", ans);
system("pause");
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...