2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=410, inf=4e4, M=inf*2+10; int f[M]; struct node{int iq, eq;} a[N]; int main(){ int n; scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d%d", &a[i].iq, &a[i].eq); memset(f, -0x3f, sizeof(f)); f[inf]=0; int ans=0; for(int i=1; i<=n; i++){ if(a[i].iq>=0){ for(int j=2*inf; j>=a[i].iq; j--) f[j]=max(f[j], f[j-a[i].iq]+a[i].eq); } else{ for(int j=0; j<=2*inf+a[i].iq; j++) f[j]=max(f[j], f[j-a[i].iq]+a[i].eq); } } for(int i=inf; i<=2*inf; i++) if(f[i]>0) ans=max(ans, i+f[i]-inf); printf("%d\n", ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=410, inf=4e4, M=inf*2+10; int f[M]; struct node{int iq, eq;} a[N]; int main(){ int n; scanf("%d", &n); for(int i=1; i<=n; i++) scanf("%d%d", &a[i].iq, &a[i].eq); memset(f, -0x3f, sizeof(f)); f[inf]=0; int ans=0; for(int i=1; i<=n; i++){ if(a[i].iq>=0){ for(int j=2*inf; j>=a[i].iq; j--) f[j]=max(f[j], f[j-a[i].iq]+a[i].eq); } else{ for(int j=0; j<=2*inf+a[i].iq; j++) f[j]=max(f[j], f[j-a[i].iq]+a[i].eq); } } for(int i=inf; i<=2*inf; i++) if(f[i]>0) ans=max(ans, i+f[i]-inf); printf("%d\n", ans); return 0; }
- 1
信息
- ID
- 2306
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 16
- 已通过
- 8
- 上传者