*题意
体积为V的背包,收集不同体积,不同价值的骨头,计算背包能装下的骨头的最大价值。
*思路
很明显是背包问题,原谅我直接用背包问题的解法做了
*源码
#include<iostream>
#include<string.h>
using namespace std;
#define M 1009
typedef struct pack
{
int cost;
int val;
}PACK;
int main()
{
int cas,n,v,i,j;
int f[M];
PACK a[M];
cin>>cas;
while(cas--)
{
cin>>n>>v;
memset(f,0,sizeof(f));
for(i=1;i<=n;i++)
cin>>a[i].val;
for(i=1;i<=n;i++)
cin>>a[i].cost;
for(i=1;i<=n;i++)
for(j=v;j>=a[i].cost;j--)
if(f[j]<f[j-a[i].cost]+a[i].val)
f[j]=f[j-a[i].cost]+a[i].val;
cout<<f[v]<<endl;
}
return 0;
}
Problem Q
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 63 Accepted Submission(s) : 23
1 5 10 1 2 3 4 5 5 4 3 2 1
14