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;}
原创粉丝点击