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;}