0-1背包
来源:互联网 发布:网络支付账户管理办法 编辑:程序博客网 时间:2024/05/03 23:28
#include<stdio.h>#include<string.h>#define max 1000#define V 1000int c[max],w[max];long long dp[V][max]; //dp[V][N]表示剩余V空间,前N个物品的最大价值;int main(){ int n,v,i,j,o; scanf("%d",&o); while(o--) { scanf("%d%d",&n,&v); memset(c,0,sizeof(c)); memset(w,0,sizeof(v)); memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { scanf("%d",&w[i]); } for(i=1;i<=n;i++) { scanf("%d",&c[i]); } for(i=0;i<=v;i++) { for(j=1;j<=n;j++) { dp[i][j]=dp[i][j-1]; if(i>=c[j]) { if((dp[i-c[j]][j-1]+w[j])>dp[i][j]) dp[i][j]=dp[i-c[j]][j-1]+w[j]; } } } printf("%I64d\n",dp[v][n]); } return 0;}