笨-Archangel

导航

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)    收藏  举报