问题描述

  有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为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;
}

原理可以查看这位博主的博客:背包九讲——全篇详细理解与代码实现

【蓝桥练习系统】【多重背包】 算法提高 贪吃的大嘴相关推荐

  1. Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴

    算法提高 贪吃的大嘴 时间限制:1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕 ...

  2. 贪吃的大嘴java_Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴

    算法提高 贪吃的大嘴 时间限制:1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕 ...

  3. 贪吃的大嘴用java_算法提高 贪吃的大嘴

    试题 算法提高 贪吃的大嘴(动态规划) 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通 ...

  4. 【蓝桥杯练习】算法提高 贪吃的大嘴

    问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能 ...

  5. 蓝桥杯 ADV-168 贪吃的大嘴

    算法提高 贪吃的大嘴 时间限制:1.0s   内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小 ...

  6. 1737:贪吃的大嘴

    1737:贪吃的大嘴 Description 算法提高 贪吃的大嘴 时间限制;1.0s 内存限制:256.0MB 问题描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大 ...

  7. [蓝桥杯][算法提高VIP]贪吃的大嘴(多重背包)

    题目描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目的.所以她 ...

  8. 算法提高(VIP)——贪吃的大嘴

    题目描述 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕. 而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度之和刚好为 m 的小蛋糕, 而且大嘴还特别懒,她希望通过吃数量最少的小蛋糕达到这个目 ...

  9. 贪吃的大嘴 多重背包 dp

    7-4 贪吃的大嘴 (15分) 有一只特别贪吃的大嘴,她很喜欢吃一种小蛋糕,而每一个小蛋糕有一个美味度,而大嘴是很傲娇的,一定要吃美味度和刚好为m的小蛋糕,而且大嘴还特别懒,她希望通过吃数量最少的小蛋 ...

最新文章

  1. 计算机网络或计算机基础知识点滴1
  2. DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
  3. Openlayers 2.X加载高德地图
  4. 暑假没人带怎么办?还有我们为你推荐论文 | 本周值得读
  5. mysql可以存储标点么_MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》...
  6. Linux纯干货知识总结|面试专用
  7. python 自动控制仿真_Python自动控制鼠标操作pymouse,python
  8. php内核分析(六)-opcode
  9. OpenCV3学习(12.3) kalman滤波器
  10. JavaScript 用typeof来判断是否是对象的弊端
  11. 送给程序员的 编程箴言
  12. 【论文复现】Hierarchical Attention Networks for Document Classification
  13. AI、大数据、中台、AIoT、Fintech等十余场火热专题应有尽有,年度盛会BDTC 2019邀您共赴!...
  14. SSM框架的详细介绍
  15. 李智慧 - 架构师训练营 第六周
  16. DM368开发 -- 再论 UBL
  17. 中国移动,电信,联通,铁通,网通的区别与联系
  18. 你如何理解目前市面上流行的贷款软件?
  19. Win7 运行bat批处理文件时怎么隐藏cmd命令提示符窗口
  20. 知识图谱嵌入的Translate模型汇总(TransE,TransH,TransR,TransD

热门文章

  1. MySQL用户和权限的管理
  2. react和vue原理与比较
  3. AD PCB实用常用快捷键总结
  4. 三个关于采购的小故事,真是绝了!
  5. 2021年知识付费行业十大趋势
  6. 每日刷题Day_15-17
  7. flask-redis使用总结
  8. FPGA中亚稳态的理解(Understanding Metastability in FPGAs)
  9. Linux源码安装wireshark记录
  10. DllMain函数详解