背包学习————完全背包
有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
1:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v}
2:f[v]=max(f[v],f[v-c[i]]+w[i]);
完全背包面临的不是对于第i件物品选不选的问题了而是选多少件了问题了。。。所以f[v]的当前状态允许由当前状态推得。
实现方法有是那种
1:o(n*v)
这里正确理解这句经典的话很关键(引用):
换句话说,这正是为了保证每件物品只选一次,保证在考虑“选入第i件物品”这件策略时,依据的是一个绝无已经选入第i件物品的子结果f[i-1][v-c[i]]。而现在完全背包的特点恰是每种物品可选无限件,所以在考虑“加选一件第i种物品”这种策略时,却正需要一个可能已选入第i种物品的子结果f[i][v-c[i]],所以就可以并且必须采用v=0..V的顺序循环。这就是这个简单的程序为何成立的道理。
http://acm.hdu.edu.cn/showproblem.php?pid=1114
![](/assets/blank.gif)
![](/assets/blank.gif)
#include <iostream>#include<cstdio>#include<cstring>using namespace std;#define N 10007#define inf 9999999int c[N],w[N],f[N]; int main(){int t,n,i,j,V;int s,e; scanf("%d",&t);while(t--) { scanf("%d%d",&s,&e); V=e-s;for(i=1;i<=V;i++) f[i]=inf; f[0]=0; scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]);for(i=1;i<=n;i++) {for(j=c[i];j<=V;j++) f[j]=min(f[j],f[j-c[i]]+w[i]); }if(f[V]!=inf) printf("The minimum amount of money in the piggy-bank is %d.\n",f[V]);else printf("This is impossible.\n"); }return 0;}
2:转化成01背包每种物品是一个01背包的方法:
![](/assets/blank.gif)
![](/assets/blank.gif)
#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int max_s = 100007;const int inf = 9999999;int c[max_s],w[max_s],f[max_s];int main(){int i,j,k,n,m,V,t,num; scanf("%d",&t);while(t--) { scanf("%d%d",&n,&m); V=m-n; scanf("%d",&num);for(i=0;i<num;i++) scanf("%d%d",&w[i],&c[i]); f[0]=0;for(i=1;i<=V;i++) f[i]=inf;for(i=0;i<num;i++) {for(j=1;j<=V/c[i];j++) {for(k=V;k>=c[i];k--) f[k]=min(f[k],f[k-c[i]]+w[i]); } }if(f[V]!=inf) printf("The minimum amount of money in the piggy-bank is %d.\n",f[V]);else printf("This is impossible.\n"); }return 0;}
3:利用二进制思想;
把第i种物品拆成费用为c[i]*2^k、价值为w[i]*2^k的若干件物品,其中k满足c[i]*2^k<=V
。这是二进制的思想,因为不管最优策略选几件第i种物品,总可以表示成若干个2^k件物品的和。这样把每种物品拆成O(log V/c[i])件物品,是一个很大的改进。(本人不大理解望大牛指点)未发现实现代码。。求解。。
转载于:https://www.cnblogs.com/E-star/archive/2011/12/06/2278244.html
背包学习————完全背包相关推荐
- 背包问题教程-01背包,完全背包,多重背包,混合背包 收藏
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有 ...
- 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
(二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...
- 2022年小游戏----游戏背包系统之自定义填充背包和切换背包页面
文章目录 蓝图展示 UI_Main_Bag蓝图 UI_Main_Bag_Item蓝图 创建数据结构和数据表 创建数据结构 引用结构创建数据表 编辑UI_Main_Bag_Item图表 使用标签获取数据 ...
- 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包
动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...
- 01背包,完全背包C++实现
首先,上自己的代码,由于代码注释详细,我就不解释啦.看代码就好O(∩_∩)O. 代码转换为了01背包问题求解. 代码部分算法与测验数据数据参照了https://blog.csdn.net/xp7315 ...
- 背包详解:完全背包与多重背包
目录 完全背包 优化一:输入优化 优化二:二进制 优化三:重复放入的 01 背包 多重背包 总结 完全背包 有一个大小为 m 的背包,有 N 种物体,每种物品的价值为 Vi, 大小为 Ai, 并且每种 ...
- 浅说——九讲背包之01背包
所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...
- hdu 3732(01背包转多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 思路:这么大的数据,用01背包肯定会TLE的,01背包转多重背包..最多也就11*11=121件 ...
- 动态规划 4、基础背包问题总结(多重背包与多重背包的转化)
描述: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 变式:有的物品 ...
最新文章
- linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$
- USACO1.1 Broken Necklace (beads)
- Python 进阶_OOP 面向对象编程_组合与继承
- javascript json_爬虫里总要用到的 JSON 是什么?
- 聚美优品范忱:我是如何将用户推荐准确率提升 10% 的?
- 完美解决Ubuntu16.04虚拟机窗口自适应问题
- avr-gcc中关于delay延时函数的应用修改版[ourdev]
- 小黄鸡 php,PHP调用小黄鸡 api post发送
- 卢伟冰:越是入门机 越应该把使用体验做好
- Thymeleaf本页面通过controller跳转到本页面的坑
- 8.22最短路径讲解
- 勤哲excel服务器点击修改,用勤哲Excel服务器实现工作任务管理系统
- 理解拉普拉斯平滑 Laplace Smoothing
- Xshell6和Xftp6的使用
- win10怎么修改计算机用户名和密码,windows10系统如何更改开机密码
- 中国科学院计算机所研究生实习,我在中科院计算所实习的日子(更新中....)...
- css3探测光圈_纯CSS3实现的镜头光晕(光圈)
- The OCD Brain: how animal research helps us understand a devastating condition
- css立体3d效果动画,css3 实现动画,变换基点及3D效果~
- windows重要信息(键盘、鼠标、计时器)
热门文章
- python识别人脸多种属性_OpenCV-Python(3)训练一个人脸识别器
- python 按从小到大的顺序组合成一个字典_将Python字典排列组合成字典列表
- python学习-模块和包
- java后台http请求完成之后怎么setcookie_关于HTTP的那些事和cookie
- reg类型变量综合电路_2014年PLD习题集(含参考答案)数字系统设计
- python一维列表的定义_数据结构-Python 列表(List)
- shell python脚本语言_python脚本里使用shell语句
- vivadoRAM中初始化文件coe如何快速生成
- mysql基础_月隐学python第22课
- zabbix-server-mysql安装_zabbix server 安装部署