一个01背包问题;
刚刚开始把题目看错了,以为物品的数目是有限的,然后让你求一个家庭里最多能够拿多个价值的东西;
这样一来的话,这个题目就有点意思了;
但是后来发现竟然是个简单的01背包问题 = =;
代码:
1 #include<cstdio> 2 #define maxn 1007 3 #include<cstring> 4 #include<algorithm> 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 ",ans); 30 } 31 return 0; 32 }