读书人

hdu 2602 Bone Collector(01双肩包)

发布时间: 2012-12-19 14:13:14 作者: rapoo

hdu 2602 Bone Collector(01背包)

看题目请点这里

题意:

给你n种骨头的价值和体积,并且每种骨头都只有一个,让你选择其中的骨头装到容积为v的袋子里,求可以得到的最大价值。

经典01背包。

代码:

#include<iostream>using namespace std;int main(){    int t,n,v,i,j;    int value[1001],volume[1001],dp[1001];    scanf("%d",&t);    while(t--)    {        memset(dp,0,sizeof(dp));        scanf("%d %d",&n,&v);        for(i=0;i<n;i++)   //骨头价值        {            scanf("%d",value+i);        }        for(i=0;i<n;i++)   //骨头体积        {            scanf("%d",volume+i);        }        for(i=0;i<n;i++)        {            for(j=v;j>=volume[i];j--)            {if(dp[j]<dp[j-volume[i]]+value[i]){dp[j]=dp[j-volume[i]]+value[i];}            }        }        printf("%d\n",dp[v]);    }    return 0;}


读书人网 >编程

热点推荐