uva 10130 SuperSale

一个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 }
View Code
原文地址:https://www.cnblogs.com/yours1103/p/3353382.html