hdu 2602 Bone Collector (01 背包基础)
http://acm.hdu.edu.cn/showproblem.php?pid=2602
题意 : n个骨头 m的容量
给出n个骨头的 value 和 volume
求m能容纳的最大价值
思路 :
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int n,m,t; int v[1000+10],w[1000+10]; int dp[1000+10]; int i,j,k; scanf("%d",&t); while(t--) { memset(dp,-1,sizeof(dp)); dp[0]=0; int ans=0; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&v[i]); for(i=1;i<=n;i++) scanf("%d",&w[i]); for(i=1;i<=n;i++) { for(j=m;j>=w[i];j--) { if(dp[j-w[i]]!=-1) { dp[j]=max(dp[j],dp[j-w[i]]+v[i]); if(ans<dp[j]) ans=dp[j]; } } } printf("%d\n",ans); } return 0; }