题目大意:给出N(N<=1000)根骨头,每个有其体积和价值,再给你一个体积为V的背包,求能装下价值最多多少骨头。
考察点:DP
思路分析:动态规划。F[j]=max(f[j],f[j-w[i]]+v[i]));
#include<stdio.h>
#define max(x,y) (x)>(y)?(x):(y)
int main()
{
int k,t,n,i,j,v;
long int f[1001];long int ans;
long int a[1001];long int w[1001];
scanf("%d",&t);
for (k=1;k<=t;k++)
{
scanf("%d%d",&n,&v);
ans=0;
for (j=1;j<=v;j++)
f[j]=0;
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
for (i=1;i<=n;i++)
scanf("%d",&w[i]);
for (i=1;i<=n;i++)
{
for (j=v;j>0;j--)
{
if (j-w[i]>=0)
f[j]=max(f[j],f[j-w[i]]+a[i]);
if (ans<f[j]) ans=f[j];
}
}
printf("%d\n",ans);
}
return 0;
}