uva 10130 SuperSale

01背包问题解析
本文介绍了一个01背包问题的解决方法,通过使用C++实现动态规划算法来计算在给定重量限制下能达到的最大价值总和。代码示例清晰地展示了如何通过双重循环更新状态数组。

一个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\n",ans);
30     }
31     return 0;
32 }
View Code

 

转载于:https://www.cnblogs.com/yours1103/p/3353382.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值