近期某商场由于周年庆,开启了“0元购”活动。活动中,消费者可以通过组合手中的代金券,实现0元购买指定商品。

聪明的小团想要用算法来帮助他快速计算:对于指定价格的商品,使用代金券凑出其价格即可,但所使用的代金券总面额不可超过商品价格。由于代金券数量有限,使用较少的代金券张数则可以实现价值最大化,即最佳优惠。

假设现有100元的商品,而代金券有50元、30元、20元、5元四种,则最佳优惠是两张50元面额的代金券;而如果现有65元的商品,则最佳优惠是两张30元代金券以及一张5元代金券。

请你帮助小团使用一段代码来实现代金券计算。
输入描述:

多组输入输出,读到s=0时结束 输入可以有多个测试样例,每个测试由两行组成。
其中第一行包含一个整数P,表示商品的价格,1≤P≤10000;输入P为0时表示结束。
第二行包含若干整数,使用空格分割。其中第一个整数N(1≤N≤20)表示有多少种代金券,其后跟随M个整数,表示手中持有的代金券面额(1≤N≤1000),每种代金券数量不限。

输出描述:

找到最少张数的代金券,使其面额恰好等于商品价格。输出所使用的代金券数量;
如果有多个最优解,只输出其中一种即可;
如果无解,则需输出“Impossible”。

示例输入

65
4 50 30 20 5
0

示例输出

3

思路:动态递归思想,设置一个数组来存放每个金额实现的数量,如果没有的话,则用无穷或者一种可以识别但又不甘于正常运行数字来代替,利用目标金额减去已有金额得到新的目标金额,将其最优(小)值加一(加上该已有金额组成目标金额)即为新的目标金额实现数量。
JS实现:

// while(true){//     var num = parseInt(readline())
//     if(num==0){//         break
//     }
//     var lines =readline()
//     var lineArr = lines.split(" ").map(Number)
//     var type = lineArr[0]
//     var money = lineArr.slice(1)
//     console.log(getResult(num,type,money))
// }
//以上代码为方面提交进行的输入处理
var num = 65;
var type = 4;
var money = [50,30,20,5];
function getResult(num, type, money) {var dp = [];dp[0] = 0;for(var i=1;i<=num;i++){var arr = [];for(var j=0;j<money.length;j++){if(i>=money[j]){arr.push(dp[i-money[j]] + 1);}}dp[i] = Math.min(...arr);}return dp[num] === Infinity?"Impossible":dp[num];
}
console.log(getResult(num,type,money))

C++实现:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define INF 0x3f3f3fint main()
{int n, m;int money[10002];int dp[10002];while(scanf("%d", &n) && n){for(int i=0;i<10002;i++){dp[i] = INF;}dp[0] = 0;scanf("%d", &m);for(int i=0;i<m;i++){scanf("%d", &money[i]);}for(int i=1;i<=n;i++){int arr[10002];int k =0;for(int j=0;j<m;j++){if(i>=money[j]){arr[k++] = dp[i-money[j]] + 1;}}int minn = INF;for(int o=0;o<k;o++){if(arr[o] < minn){minn = arr[o];}}dp[i] = minn;}if(dp[n] == INF){printf("Impossible\n");}else{printf("%d\n", dp[n]);}}return 0;
}

美团刷题 代金券组合相关推荐

  1. go语言刷题:77. 组合

    申明:本文只用做自己的学习记录 题目 给定两个整数 n 和 k,返回 1 - n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2 ...

  2. 刷题day46:组合

    从此替开始为回溯算法. 代码随想录 (programmercarl.com) 回溯算法模板: 伪代码如下: void backtracking(参数) {if (终止条件) {存放结果;return; ...

  3. 最少代金券问题之JavaScript解法

    前言 最近在牛客网上刷题,遇到一题代金券的问题,花了我一下午时间研究(我才刚开始复习算法和数据结构),写此文章来记录一下. 题目传送门:https://www.nowcoder.com/questio ...

  4. 【CCCC】L2-027 名人堂与代金券 (25分),模拟水题

    problem L2-027 名人堂与代金券 (25分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合 ...

  5. ​LeetCode刷题实战216:组合总和 III

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. LeetCode刷题精选(基于LeetCode企业题库2021年一月截止,字节,美团,网易,阿里,腾讯,共同题目)

    算法是面试中准备比较耗时的,但又不知从何刷起,数组,查找表,堆栈队列,二叉树,递归,动态规划,回溯,图- 如果每个专题都需要练习,那成本太大了, so 怎么做呢... 就是 干... 直接刷题-> ...

  7. selenium学习笔记(4)——自动点击美团上面的美食中的代金券

    想要系统学习python selenium自动化测试,请关注我的专栏: https://blog.csdn.net/column/details/29112.html 自动点击美团上面的美食中的代金券 ...

  8. 大一就开始这样刷题后,我成了同学们眼中的 offer 收割机

    CSDN 的小伙伴们,大家好,我是五一也没有闲着的二哥. 之前不是给大家分享了一份 Java 版的 LeetCode 刷题笔记嘛,很多小伙伴留言说刚好需要,对我这种大公无私的分享精神表示敬佩(嘘. 但 ...

  9. 2021秋招-刷题统计

    字节跳动 ⭐⭐字节跳动2020面试算法题+场景题+智力题100题 ⭐⭐答案)字节跳动算法题+场景题+智力题100题 动态规划.贪心 1.算法题:买卖股票的最佳时机(只能有一次买卖,可以最多两次买卖,不 ...

最新文章

  1. BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂
  2. Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream
  3. Python再获年度编程语言,微软或成最大赢家
  4. 亲测:阿里云的高效云盘真没有声称那么好
  5. Hadoop学习之HDFS架构(一)
  6. java 数组 树_java使用顺序数组实现二叉树
  7. 18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?
  8. getresourceasstream 路径_Java 获取资源文件路径
  9. Sqlite 数据库出现database disk image is malformed报错的解决方法
  10. [收藏]数据库备份及恢复
  11. jmp怎么做合并的箱线图_基于JMP 15的箱线图(Box Plot)的着色
  12. xp计算机无法正常启动,修复XP系统无法正常启动进入不了计算机的解决办法
  13. 3. 用户/管理员注册登录 - 如何使用个人Facebook来登录门户网站
  14. 汇编语言cf,of,sf,zf
  15. 基于lio-sam框架,教你如何进行回环检测及位姿计算
  16. Linux环境创建oracle数据库
  17. Web相关:Sublime如何安装ESLint插件?
  18. Java编程初学者看什么书籍比较合适?
  19. C语言--getchar()函数超详细解析(多维度分析,小白一看就懂!!!)
  20. VCC、VDD、VSS、GND区别

热门文章

  1. 日志报错SQL Error: 1062, SQLState: 23000
  2. 利用JavaScript实现禁用浏览器后退
  3. 加密、解密、加签、验签专题
  4. php 怎么输出m3u,m3u文件扩展名,m3u文件怎么打开?
  5. 透视投影变换矩阵推导学习笔记
  6. vue新春游戏-年兽大作战,欢欢喜喜过大年(可在线体验)
  7. 【数据结构与算法08】234树
  8. 用draw.io画图怎么把公式写上去
  9. ARIMA如何引入外生变量
  10. UI非常漂亮的数诚1对1直播/带收徒/带公会/运营版本