HDU2191 多重背包或者01背包 xingxing在努力
珍惜现在, 感恩生活,记得汶川大地震那年我还在6年级, 当时以为是后面的同学在摇我的凳子, 几分钟后班里机智的同学才说地震了,大家赶快往楼下跑。这道题才让我真正理解了背包九讲前面讲解的东西, 题意就不赘述了。很传统的多重背包的题,多重背包代码如下:
#include <cstdio> #include <cstring> #include <algorithm>using namespace std; const int inf = 0x3f3f3f3f; int n, m; //金额 大米种类 int p[100+10], h[100+10], c[100+10]; //价格 重量 袋数 int f[100 + 10]; //大米的价格为f时 重量的最大值void CompPack(int cost, int weight) {for(int j=cost; j<=n; j++)if(f[j]<f[j-cost]+weight && f[j-cost]>=0)f[j] = f[j-cost] + weight;return ; }void ZeroOnePack(int cost, int weight) {for(int j=n; j>=cost; j--)if(f[j]<f[j-cost]+weight && f[j-cost]>=0)f[j] = f[j-cost] + weight;return ; }void multipack(int cost, int weight, int number) {if(cost*number > n){CompPack(cost, weight);return ;}int k = 1;while(k < number){ZeroOnePack(k*cost, k*weight);number -= k;k *= 2;}ZeroOnePack(number*cost, number*weight); }int main() {int T;scanf("%d", &T);while(T--){scanf("%d%d", &n, &m);for(int i=0; i<m; i++)scanf("%d%d%d", &p[i], &h[i], &c[i]);for(int i=0; i<=n; i++) f[i] = -inf;f[0] = 0; for(int i=0; i<m; i++)multipack(p[i], h[i], c[i]);printf("%d\n", f[n]);}return 0; }
下面是01暴力背包 大体思路就是将一种物品看成好几个物品分别做01背包
#include <cstdio> #include <cstring> #include <algorithm>using namespace std; const int inf = 0x3f3f3f3f; int n, m; //总钱数 和 大米的种类数、 int p[100+10], h[100+10], c[100+10]; //大米的单价 大米的重量 以及数量 int f[100 + 10]; //价钱为j时的最大重量void ZeroOnePack(int cost, int weight) {for(int j=n; j>=cost; j--)if(f[j]<f[j-cost]+weight && f[j-cost]>=0)f[j] = f[j-cost] + weight;return ; }int main() {int T;scanf("%d", &T);while(T--){scanf("%d%d", &n, &m);for(int i=0; i<m; i++)scanf("%d%d%d", &p[i], &h[i], &c[i]);for(int i=0; i<=n; i++)f[i] = -inf;f[0] = 0;for(int i=0; i<m; i++)for(int j=0; j<c[i]; j++)ZeroOnePack(p[i], h[i]);printf("%d\n", f[n]);}return 0; }
转载于:https://www.cnblogs.com/xingxing1024/p/5011183.html
HDU2191 多重背包或者01背包 xingxing在努力相关推荐
- 完全背包与01背包的区别
写在前面的话: 人被打击得多了,好像对什么都开始麻木了 本文主要是关于完全背包和01背包的对比 完全背包练习题:这里 01背包练习题:这里 我们来考虑一个问题背景,现在你在荒野求生,帐篷已经搭好了,在 ...
- 【qduoj - 142】 多重背包(0-1背包的另类处理,dp)
题干: ycb的ACM进阶之路 Description ycb是个天资聪颖的孩子,他的梦想是成为世界上最伟大的ACMer.为此,他想拜附近最有威望的dalao为师.dalao为了判断他的资质,给他出了 ...
- 1919: kirito's 星爆气流斩(多重背包转换为01背包+二进制优化)
Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...
- zcmu 1919 kirito's 星爆气流斩(多重背包转01背包,并且进行2进制优化)
思路:明显的背包问题,并且是多重背包,多重背包有两种思路 思路1:当成一种新情况考虑,因为有个数的限制所以跟完全背包不一样的地方在于状态转移方程应该是dp[i]=max{dp[i],dp[i-k*w[ ...
- java多重背包算法,01背包、完全背包和多重背包
最优化原理 指的最优策略具有这样的性质:不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略. 如何证明一个最优策略的子策略也是最优解,一般使用反证法来证明. 无后效性 ...
- HDOJ--2191--悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包变01背包)
悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 浅说——九讲背包之01背包
所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...
- 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- 中中的背包(01背包,完全背包,二进制优化时间复杂度)
题目描述 每个人小时候都有自己的理想,但随着时间推移,渐渐的大多数人的理想变成了金钱.地位.面子- 于是大多数人 就变成了传说中的俗人.但我们的中中始终有自己的梦想,他要 环 游 世 界! 在20XX ...
最新文章
- python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解
- C# 读取CSV和EXCEL文件示例
- 另我模糊的URL 重写
- JS实现html国际化二
- 【LeetCode】剑指 Offer 35. 复杂链表的复制
- vue.js的学习中的简单案例
- android中getSystemService详解
- 对比会声会影与剪映哪个制作转场效果更专业
- 微型计算机的软件系统分成,会计电算化辅导:微型计算机软件系统
- P6035CDN打印机 kyocera_京瓷P7040cdn打印机驱动下载
- Flink 利器:开源平台 StreamX 简介
- 火狐浏览器不兼容event问题
- 一款简单而强大的截图软件 Snipaste
- 青春犹如一场盛大的演出,
- java苹果通知V2新版协议实现订阅退款
- 虚拟机中再安装虚拟化软件Xp以上
- 打开PPT时总是弹出windows Installer
- windows系统 方便处理数据的bat批处理脚本(个人记录)
- 微信公众号怎么放这种带图片的链接?
- Linux加减程序编写,Makefile 入门(加减乘除实现)
热门文章
- WCF 部署在IIS上
- eclipse 优化。
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
- 安装sql时挂起的解决方法
- linux下设置程序后台运行,linux中如何让进程在后台运行
- python 写入文件编码_使用Python写入文本文件时的编码问题
- java 圆形碰撞箱_你会使用“碰撞箱”吗?5种你不知道的玩法 甚至能定位死亡方位...
- mysql修改数据存放位置_Mysql 修改数据库存放位置
- java笔试题型_JAVA笔试必备题
- java的循环条件_Java循环和条件