hdu 2602一个典型的背包问题
#include<cstdio>
#include<cstring>
int main()
{
int T,N,V;
scanf("%d",&T);
int bg[1000],vol[1000],w[1000];
while(T--)
{
memset(bg,0,sizeof(bg));
scanf("%d%d",&N,&V);
int i,j;
for(i=1;i<=N;i++)
scanf("%d",&w[i]);
for(i=1;i<=N;i++)
scanf("%d",&vol[i]);
for(i=1;i<=N;i++)
//每个骨头都会被检查一次
{
for(j=V;j>=vol[i];j--)
//检查背包体积大于等于骨头体积的背包(1)
{
if(bg[j-vol[i]]+w[i]>bg[j])
//如果(1)中背包的价值小于减掉骨头体积的背包的价值
bg[j]=bg[j-vol[i]]+w[i];
//(1)背包将会被更新,表示这个j体积的背包最大可装的价值
}
}
printf("%d\n",bg[V]);
}
return 0;
}
posted on 2012-03-28 22:29 笨-Archangel 阅读(166) 评论(0) 收藏 举报
浙公网安备 33010602011771号