【蓝桥练习系统】【多重背包】 算法提高 贪吃的大嘴
问题描述
有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目的.所以她希望你能设计一个程序帮她决定要吃哪些小蛋糕.
输入格式
先输入一行包含2个整数m、n,表示大嘴需要吃美味度和为m的小蛋糕,而小蛋糕一共有n种,下面输入n行,每行2个整数,第一个表示该种小蛋糕的美味度,第二个表示蛋糕店中该种小蛋糕的总数
输出格式
输出一行包含一个整数表示大嘴最少需要吃的小蛋糕数量,若大嘴无法通过吃小蛋糕达到m的美味度和,则输出"><“.
样例输入
10 2
4 1
2 10样例输出
4
样例输入
10 2
4 1
7 3样例输出
><
数据规模和约定
m ≤ 20000,小蛋糕总数量≤50.
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;// 解题思路:
// 多重背包模板题
// 即在恰好装满m容量时,最少的物品个数
// 将多重背包转化为01背包,并采用了二进制优化,当然这道题的数据很小不优化也可以轻松通过
// 原理详解分析可查看<<背包九讲>>// 快读
inline void read(int &x)
{register int f = 1; x = 0;register char c = getchar();while(c > '9' || c < '0'){if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9'){x = (x << 3) + (x << 1) + (c ^ 48);c = getchar();}x *= f;
}const int maxm = 2e4 + 5;
// 已装容量为j的最小物品数
int dp[maxm];
// w为各个物品的体积, cnt 为各个物品的数量
int w[55], cnt[55];
int main()
{// 读入数据int n, m;read(m); read(n);for(int i = 1; i <= n; i++){read(w[i]); read(cnt[i]);}// 初始化dp数组初始状态为不合法的解,因为不能什么都不装就刚好装满这个容量,且这道题求的是最小数量,则初始化为inf// 若求最大则初始化为-infmemset(dp, 0x3f, sizeof(dp));// 只有0的状态是合法解,因为0可以什么都不装,即为0dp[0] = 0;for(int i = 1; i <= n; i++){// 容量允许下的最小数量int num = min(cnt[i], m / w[i]);// 将个数拆分为二进制,则也同时可组合0~num的任何个数,类似倍增for(int k = 1; num > 0; k <<= 1){// 如果最后已经超出,则将剩余的数量直接归为一组即可if(k > num) k = num;num -= k;// 同01背包状态转移for(int j = m; j >= w[i]; j--){dp[j] = min(dp[j], dp[j - k * w[i]] + k);}}}// 输出结果if(dp[m] > 100)printf("><");elseprintf("%d\n", dp[m]);return 0;
}
原理可以查看这位博主的博客:背包九讲——全篇详细理解与代码实现
【蓝桥练习系统】【多重背包】 算法提高 贪吃的大嘴相关推荐
- Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
算法提高 贪吃的大嘴 时间限制:1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕 ...
- 贪吃的大嘴java_Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
算法提高 贪吃的大嘴 时间限制:1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕 ...
- 贪吃的大嘴用java_算法提高 贪吃的大嘴
试题 算法提高 贪吃的大嘴(动态规划) 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通 ...
- 【蓝桥杯练习】算法提高 贪吃的大嘴
问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能 ...
- 蓝桥杯 ADV-168 贪吃的大嘴
算法提高 贪吃的大嘴 时间限制:1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小 ...
- 1737:贪吃的大嘴
1737:贪吃的大嘴 Description 算法提高 贪吃的大嘴 时间限制;1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大 ...
- [蓝桥杯][算法提高VIP]贪吃的大嘴(多重背包)
题目描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目的.所以她 ...
- 算法提高(VIP)——贪吃的大嘴
题目描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕. 而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度之和刚好为 m 的小蛋糕, 而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目 ...
- 贪吃的大嘴 多重背包 dp
7-4 贪吃的大嘴 (15分) 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋 ...
最新文章
- 计算机网络或计算机基础知识点滴1
- DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
- Openlayers 2.X加载高德地图
- 暑假没人带怎么办?还有我们为你推荐论文 | 本周值得读
- mysql可以存储标点么_MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...
- Linux纯干货知识总结|面试专用
- python 自动控制仿真_Python自动控制鼠标操作pymouse,python
- php内核分析(六)-opcode
- OpenCV3学习(12.3) kalman滤波器
- JavaScript 用typeof来判断是否是对象的弊端
- 送给程序员的 编程箴言
- 【论文复现】Hierarchical Attention Networks for Document Classification
- AI、大数据、中台、AIoT、Fintech等十余场火热专题应有尽有,年度盛会BDTC 2019邀您共赴!...
- SSM框架的详细介绍
- 李智慧 - 架构师训练营 第六周
- DM368开发 -- 再论 UBL
- 中国移动,电信,联通,铁通,网通的区别与联系
- 你如何理解目前市面上流行的贷款软件?
- Win7 运行bat批处理文件时怎么隐藏cmd命令提示符窗口
- 知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD