本题就是最简单的0-1背包问题
代码:
#include<stdio.h>
#include<string.h>
int dp[1001][1001],v[1001],val[1001];
int Max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int T;
int i,vol,n,vi;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&vol);
memset(dp,0,sizeof(dp));
memset(v,0,sizeof(v));
memset(val,0,sizeof(val));
for(i=0;i<n;i++)
scanf("%d",&val[i]);
for(i=0;i<n;i++)
scanf("%d",&v[i]);
for(vi=0;vi<=vol;vi++)
if(v[0]<=vi) dp[0][vi]=val[0];
for(i=1;i<=n-1;i++)
{
for(vi=0;vi<=vol;vi++)
{
if(v[i]<=vi) dp[i][vi]=Max(dp[i-1][vi-v[i]]+val[i],dp[i-1][vi]);
else dp[i][vi]=dp[i-1][vi];
}
}
printf("%d\n",dp[n-1][vol]);
}
return 0;
}