题目
略
题解
直接套模版。
装箱问题需要输出$V-dp[n][V]$,其它输出$dp[n][V]$。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include<cstdio> #include<algorithm> const int MAXN=100+5; const int MAXV=1000+5; int dp[MAXN][MAXV]; int main() { int n,v,c,w; scanf("%d",&n); scanf("%d",&v); for(int i=1;i<=n;i++) { scanf("%d %d",&w,&c); for(int j=1;j<=v;j++) if(j>=c) dp[i][j]=std::max(dp[i-1][j],dp[i-1][j-c]+w); else dp[i][j]=dp[i-1][j]; } printf("%d",dp[n][v]); return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<cstdio> #include<algorithm> const int MAXN=100+5; const int MAXV=1000+5; int dp[MAXN][MAXV]; int main() { int n,v,c,w; scanf("%d %d",&v,&n); for(int i=1;i<=n;i++) { scanf("%d %d",&c,&w); for(int j=1;j<=v;j++) if(j>=c) dp[i][j]=std::max(dp[i-1][j],dp[i-1][j-c]+w); else dp[i][j]=dp[i-1][j]; } printf("%d",dp[n][v]); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<cstdio> #include<algorithm> const int MAXN=30+5; const int MAXM=20000+5; int n,v,c,dp[MAXN][MAXM]; int main() { scanf("%d",&v); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&c); for(int j=1;j<=v;j++) if(j>=c) dp[i][j]=std::max(dp[i-1][j],dp[i-1][j-c]+c); else dp[i][j]=dp[i-1][j]; } printf("%d",v-dp[n][v]); return 0; }
|