1 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=510; struct node { int x, y, L; }a[N]; int dp[N][110]; int main() { int n, K;scanf("%d%d", &n, &K); for(int i=1;i<=n;i++)scanf("%d%d", &a[i].x, &a[i].y); a[i].L = a[i].x + a[i].y; sort(a+1, a+n+1, [](const node &n1, const node &n2){return (n1.x != n2.x) ? n1.x < n2.x : n1.y < n2.y;}); memset(dp, 0, sizeof(dp)); for(int i=1;i<=n;i++)for(int j=0;j<=K;j++) dp[i][j] = 1 + j; for(int i=2, j;i<=n;i++) { for(j=i-1;j>=1;j--)if(a[j].x <= a[i].x && a[j].y <= a[i].y) { int t = a[i].L - a[j].L; if(t > K + 1) continue; for(int k=0;k <= K - t + 1;k++) { dp[i][k + t - 1] = max(dp[i][k + t - 1], dp[j][k] + t); } } } int ans=0; for(int i=1;i<=n;i++)for(int j=0;j<=K;j++)ans = max(ans, dp[i][j]); printf("%d\n", ans); return 0; }
- 1
信息
- ID
- 1981
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 51
- 已通过
- 12
- 上传者