1 条题解
-
0Guest LV 0 MOD
-
0
#include<bits/stdc++.h> using namespace std; int a[805],b[805]; long long f[805][805],g[805]; int n,k; int main() { scanf("%d%d",&n,&k); for(int i=1; i<=n; i++) scanf("%d%d",&a[i],&b[i]); for(int i=1; i<n; i++) if(a[i]+a[i+1]<=k) f[i][i+1]=b[i]+b[i+1]; else f[i][i+1]=INT_MIN; for(int d=3; d<=n; d+=2) for(int i=1; i+d<=n; i++) { int j=i+d; f[i][j]=INT_MIN; if(a[i]+a[j]<=k) f[i][j]=f[i+1][j-1]+b[i]+b[j]; for(int k=i+1; k<j; k++) if(k-i&1) f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]); } for(int i=2; i<=n; i++) { g[i]=g[i-1]; for(int j=1; j < i; j++) if(f[j][i]>0) g[i]=max(g[i], g[j-1]+f[j][i]); } printf("%lld\n",g[n]); return 0; }
- 1
信息
- ID
- 1442
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 2
- 已通过
- 1
- 通过率
- 50%
- 上传者