简单的0-1背包问题
动规方程是: f[j]=max(f[j],f[j-v[i]]+w[i])
AC代码如下:
#include <stdio.h> #include <string.h> int n,v,w[1050],c[1050]; int dp[10000]; int max(int a,int b) { if(a>b) return a; else return b; } void pack(int cost,int weight) { int j; for(j=v;j>=cost;j--) dp[j]=max(dp[j],dp[j-cost]+weight); } int main() { int t,i; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); scanf("%d %d",&n,&v); for(i=0;i<n;i++) scanf("%d ",&w[i]); for(i=0;i<n;i++) scanf("%d ",&c[i]); for(i=0;i<n;i++) pack(c[i],w[i]); printf("%d\n",dp[v]); } return 0; }