机试小课堂 | 动态规划·例题讲解①《最小邮票数》

苏世机试小课堂,考研机试不再慌!
最小邮票数
题目描述
有若干张邮票,要求从中选取最少的邮票张数凑成一个给定的总值。如,有1分,3分,3分,3分,4分五张邮票,要求凑成10分,则使用3张邮票:3分、3分、4分即可。
输入描述
有多组数据,对于每组数据,首先是要求凑成的邮票总值M,M<100。然后是一个数N,N〈20,表示有N张邮票。接下来是N个正整数,分别表示这N张邮票的面值,且以升序排列。
输出描述
对于每组数据,能够凑成总值M的最少邮票张数。若无解,输出0。
输入
10
5
1 3 3 3 4
输出
3
答案
①读题:
题意很明显,就是选择最少的邮票数凑成给定的总值。
②想出思路:
要求解和一致情况下的组合数最小,这里定义一个dp数组存放结果值,双重循环遍历邮票张数,第二层从n开始递减到a[i],逐渐找到最小,最后输出结果位
③动手编程:


④测试样例:
⑤提交代码:
进入下面的链接提交代码:
https://www.nowcoder.com/practice/83800ae3292b4256b7349ded5f178dd1?tpId=40&&tqId=21345&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
⑥返回评测结果:

至此,这道题我们就已经完成了。
本题总结
动态规划典型题目,最重要的是明白两层for循环为什么这么写。
苏世学社旗下品牌,专注于计算机考研
计算机考研一手资讯,原创高质量干货
深度的学习分享丨咨询前辈丨个性化指导
