一、题目

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

输入
先输入一行包含2个整数m、n,表示大嘴需要吃美味度和为m的小蛋糕,而小蛋糕一共有n种,下面输入n行,每行2个整数,第一个表示该种小蛋糕的美味度,第二个表示蛋糕店中该种小蛋糕的总数

数据规模和约定
m ≤ 20000,小蛋糕总数量≤50.

输出
输出一行包含一个整数表示大嘴最少需要吃的小蛋糕数量,若大嘴无法通过吃小蛋糕达到m的美味度和,则输出" > < “.
样例输入

10 2
4 1
2 10

样例输出

4

二、思路和代码

思路:通过每次将一个小蛋糕纳入考虑来更新dp数组。具体可以看代码注释。
技巧:将蛋糕美味度从大到小排列可以减少更新dp数组次数。用isUse数组记录某个位置是否用了该蛋糕。
总结:动态规划有两种更新方式,一种是通过每一种状态转移方式更新并确定每个位置的dp值;另一种是一个个考虑逐步更新dp数组,如这道题的做法其实类似与筛法求素数。

# 思路:自底向上,动态规划
m, n = [int(x) for x in input().split()]
ls = list()
for _ in range(n):ls.append([int(x) for x in input().split()])dp = [float("inf") for _ in range(m+1)]dp[0] = 0
# 将ls按照美味度从大到小排列
ls = sorted(ls, key = lambda a:a[0], reverse = True)# cur为当前考虑的蛋糕种类下标,cur之前的都已经考虑过
def addOne(cur):global dp, ls, nif cur >= n:returnyummy = ls[cur][0]num = ls[cur][1]# 将该种类蛋糕一个个纳入考虑for i in range(num):# 每个蛋糕每个地方只用一次,用isUse记录isUse = [False for _ in range(m+1)]for j in range(m+1):if j+yummy <= m:if isUse[j]:continueif dp[j+yummy]>dp[j]+1:dp[j+yummy] = dp[j]+1isUse[j+yummy] = Trueelse:breakaddOne(cur+1)addOne(0)if dp[m]==float("inf"):print("><")
else:print(int(dp[m]))

蓝桥杯-贪吃的大嘴(python动态规划)相关推荐

  1. 蓝桥杯 贪吃的大嘴

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

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

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

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

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

  4. 工作室课题—贪吃的大嘴(蓝桥杯)

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

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

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

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

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

  7. 蓝桥 贪吃的大嘴(Java)

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

  8. 【蓝桥练习系统】【多重背包】 算法提高 贪吃的大嘴

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

  9. 贪吃的大嘴-动态规划

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

最新文章

  1. YOLOv3和YOLOv4长篇核心综述(下)
  2. 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,基于数据库Greenplum的开源版本,并且吸收PostgreSQL精髓...
  3. Matlab实现线性回归和逻辑回归: Linear Regression Logistic Regression
  4. 计算机游戏的英语怎么写,电脑游戏英语怎么写
  5. 怎么用js调用C#后台方法
  6. 一个基本c语言注释用什么字符,C语言的词法规则京鸿智武 今天提纲:本文主要介绍了C语言中...
  7. java compareandset 包_Java AtomicReferenceArray compareAndSet()用法及代码示例
  8. linux cpu不足处理运维,Linux运维知识之Linux服务器CPU占用率较高问题排查思路
  9. 机器学习之开源库大总结
  10. cpython和jpython_在J内部使用Python
  11. python函数和代码复用思维导图_Python语言程序---代码复用与函数递归(二)
  12. ASP.NET【1】
  13. {过时·留存}MS Office文档
  14. android 自定义控件之下拉刷新源码详解
  15. javascript 字符串中单引号和双引号区别
  16. axure element ui素材_web元件库 ElementUI元件库+后台模板页面+官网组件 pc元件库(兼容Axure9)...
  17. 计算机入门培训考试,计算机基础培训考试习题.doc
  18. 网络安全等级符合三级等保要求套餐
  19. 马哥教育42期第三周作业
  20. dota2自走棋Android怎么更新,dota2自走棋

热门文章

  1. 天池新人实战赛o2o优惠券使用预测四(别家代码分析1)
  2. 百度中科大“大学生创业家成长计划”开始啦!
  3. 在pdfjs的getDocument()请求中添加自定义标头
  4. 【samba服务器搭建】
  5. OpenOCD-Jlink配置方法
  6. IDEA 使用Git管理项目
  7. 网络工程师笔记——数字签名与数字证书
  8. js完成卡片式列表效果(移动+阴影)
  9. Axure 10 案例:模拟鼠标拖拽画框线的效果
  10. 【简历投递】数字IC前端设计工程师-北京