刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

邮票收集
小A是个邮票收集爱好家,他有n种面值的邮票,每种邮票都有无数张。一天小B想要寄信,需要一共面值和为k的邮票组合。小A想要知道拼出面值为k的邮票最少需要多少张。
时间限制:1000
内存限制:131072
输入
输入是多组数据。(不超过10组) 每组数据的第一行正整数n,k,表示邮票的种类数目和目标要拼出的钱。(0 < n ≤ 100, 0 < k ≤ 1000 ) 接下来的一行有n个正整数ai(0 < ai ≤ 1000)。 若n=k=0表示输入结束。
输出
每组数据输出一行一个数,分别表示拼出k需要的最少的邮票数量。 如果不存在能够拼出k的方案,输出-1。
样例输入

4 10
1 2 3 4 
5 16
1 2 3 4 5 
2 7
4 5
0 0

样例输出

3
4
-1

提示
第一组数据: 10 = 4+4+2 第二组数据:16 = 5+5+5+1 第三组数据: 不存在。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

【喵呜刷题小喵解析】:本题是一道典型的动态规划问题,可以使用动态规划算法来解决。首先,定义一个dp数组,dp[i]表示组成面值i的最小邮票数,初始值都设为无穷大,表示不可达。然后,遍历每一种面值的邮票,对于每种邮票,都尝试用它组成从该面值到k的所有面值,并更新dp数组。最后,如果dp[k]仍然是无穷大,表示无法组成面值k的邮票,输出-1;否则,输出dp[k]。本题的时间复杂度为O(n^2k),其中n为邮票的种类数,k为目标面值。由于k的最大值为1000,因此本题的时间复杂度可以接受。
创作类型:
原创

本文链接:邮票收集 小A是个邮票收集爱好家,他有n种面值的邮票,每种邮票都有无数张。一天小B想要寄信,需要一共

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share