#include<stdio.h>
#include<string.h>
#define max 1000
#define V 1000
int 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;
}
0-1背包
最新推荐文章于 2024-05-21 12:27:54 发布