一个01背包问题;
刚刚开始把题目看错了,以为物品的数目是有限的,然后让你求一个家庭里最多能够拿多个价值的东西;
这样一来的话,这个题目就有点意思了;
但是后来发现竟然是个简单的01背包问题 = =;
代码:
1 #include2 #define maxn 1007 3 #include 4 #include 5 using namespace std; 6 7 int price[maxn],weight[maxn],f[105]; 8 int main() 9 {10 int t,n,g,x;11 scanf("%d",&t);12 while(t--)13 {14 scanf("%d",&n);15 for(int i=1; i<=n; i++)16 scanf("%d%d",&price[i],&weight[i]);17 scanf("%d",&g);18 int ans=0;19 while(g--)20 {21 scanf("%d",&x);22 memset(f,0,sizeof f);23 for(int i=1; i<=n; i++)24 for(int j=x; j>=0; j--)25 if(j>=weight[i])26 f[j]=max(f[j],f[j-weight[i]]+price[i]);27 ans+=f[x];28 }29 printf("%d\n",ans);30 }31 return 0;32 }