背包问题

卖方:这件商品14元
买方:给你20元
卖方:不好意思,我的零钱不够
买方:好吧,这是15元,剩的当小费

当到一个地方旅游时,如果你买东西的地方不支持信用,带零钱还是非常有用的。特别是有时候卖方没有零钱,如果你没有刚好的钱,你需要支付比卖价多一点。

当然你想付尽量少的钱(至少是商品价值的钱)。并且,当支付最少钱的时候,也最好是支付的硬币的数量最少。

Input
第一行包含一个整数表示测试数据的组数。每组测试数据每一行包含一个整数,表示你需要付的钱数,钱数不超过10000元。接下来包含一个整数n,表示你所拥有的钱的数量,n最多是100,接下来的n行每行一个整数,表示你有的每个硬币的面值,注意钱的面值可以是任意的,不和我们现在用的面值一样,钱的面值不超过10000元。

Output
对每组测试数据,在一行上输出两个整数:需要支付的钱数和数量。

Sample Input
1
1400
3
500
1000
2000
Sample Output
1500 2

j代表从1到所有钱数的和,为了简便存储,赋予j特定的范围30400,a[i]的值表示拥有钱的面值,dp[i][j]的值表示前 i 张钱刚好能支付对应的钱为 j 时所需要的钱的张数

初始赋值:将dp[i][i]整个表赋值为比输入的钱数大1的值(n+1),dp[i][0]=0,

关键算法:如果j<a[i] dp[i][j]=dp[i-1][j]
如果 j>=a[i] dp[i][j]=min(dp[i-1][j-a[i]]+1,dp[i-1][j])

查找用到的钱的面值:将需要支付的钱数m作为搜寻dp表的初始 j 值,从dp[i][m]开始正向搜索,从左到右、从上到下查找到第一个比(n+1)小的值输出其dp[i][j]的值表示钱的数量,j表示支付的钱数。

#include <iostream>
#include <algorithm>
using namespace std;
int dp[101][30400];
int main()
{int x,m,n,a[101],sum;cin>>x;while(x--){cin>>m;cin>>n;for(int i=1; i<=n; i++){cin>>a[i];}for(int i=0; i<=n; i++)for(int j=0; j<=30400; j++)dp[i][j]=n+1;for(int i=0; i<=n; i++)dp[i][0]=0;for(int i=1; i<=n; i++)for(int j=1; j<=30400; j++){if(j<a[i])dp[i][j]=dp[i-1][j];if(j>=a[i])dp[i][j]=min(dp[i-1][j-a[i]]+1,dp[i-1][j]);}int tp=0,mp=0;for(int j=m; j<=30400; j++){for(int i=1; i<=n; i++){if(dp[mp][j]>dp[i][j]){mp=i;tp=j;}}if(tp!=0){cout<<tp<<" "<<dp[mp][tp]<<endl;break;}}}return 0;
}

由于刚开始想用动态数组分配内存来存储数据(动态分配又不太会,一直运行不对,哈哈哈哈)。

初始化 dp[i][j] 时,由于一心想着 j 要循环到sum,一直运行不对(不知道是什么原因,哈哈哈哈哈,我是个业余的程序员)。

完全背包问题 旅游付费相关推荐

  1. 算法一(python)

    文章目录 二分查找 大O表示法 数组&链表 选择排序 递归 栈 递归调用栈 分而治之 快速排序 散列表 缓存 冲突 填装因子 良好的散列函数 广度优先搜索(breadth-first sear ...

  2. Python告诉你这些旅游景点好玩、便宜、人又少!

    (图片由CSDN付费下载自东方IC) 作者 | 猪哥 来源 | 裸睡的猪(ID:IT--Pig) 2019年国庆马上就要到来, 今年来点新花样吧, 玩肯定是要去玩的, 不然怎么给祖国庆生? 那去哪里玩 ...

  3. 去哪儿对垒携程 在线旅游静悄悄的革命

    出处:21世纪经济报道 时间:2011-05-11 10:38[ 字体: 大 中 小 ] [打印此页] [关闭] 颠覆与被颠覆的游戏,正于在线旅游市场悄然演绎.  5月10日,携程收报48.3美元,市 ...

  4. 法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准

    法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准https://zhuanlan.zhihu.com/p/82878902 执笔人:张宗保律师(联系方式:知乎私信) 执业地域:深圳市 执业方向:民商事诉 ...

  5. 互联网晚报 | 1月25日 星期二 | 知乎首次举办上星晚会;微信视频号上线首个付费直播间;淘宝天猫“春节不打烊”活动正式上线...

    今日看点 ✦ 淘宝天猫"春节不打烊"活动正式上线,20万商家春节照常发货 ✦ 微信视频号上线首个付费直播间,免费观看3分钟后需付费 ✦ 知乎首次举办上星晚会,2022知乎答案奇遇夜 ...

  6. 旅游解说系统 VS 旅游信息系统

    旅游解说系统: "解说是一种信息传送的服务,目的在于告知及取悦游客,并阐释现象背后所代表之含义,籍着提供相关的咨询来满足每个让你的需求与好奇,同时又不偏离中心主题,期能激励游客对所描述的事物 ...

  7. 旅游捞金的六大方式,玩着把钱赚了

    生活在繁忙的大都市中,面对劳累的工作和繁琐的家事,一场说走就走的旅行无疑是肆放焦虑的良药. 但现实是"说走就走"绝不是那样简单的. 时间要调配.工作需处理.路线应规划...... ...

  8. 阿里Q1财报:云计算付费用户首超100万

    2017年8月17日晚间,阿里巴巴集团公布2018财年第一季度(2017年4月至6月底)财报,阿里云达到一个重要里程碑,云计算付费用户数量首次超过100万.同时,企业级市场被云计算人工智能等新技术全面 ...

  9. 带你去旅游 伴我游世界

    TOP1 南非"非洲之傲"列车 最优质列车旅游线路 行车段:南非比勒陀利亚至开普敦.维多利亚瀑布,路过南非著名的钻石之城--金伯利. 排名理由:"非洲之傲"罗沃 ...

  10. 深度:老年旅游市场迎来转折点,50/60新老年消费升级带来结构性创新机会—营销/产品/运营

    || 高获客成本与同质化恶性竞争倒逼中老年旅游市场进入转折点 对于中国老年行业来说,老年旅游是最先崛起的C端消费市场,也是过去连续许多年增长超过20%,整体规模突破万亿的消费市场,老年行业内众多相关或 ...

最新文章

  1. JS --正则表达式
  2. 当周期信号的频率趋向无穷时,它将消失
  3. 文巾解题 278. 第一个错误的版本
  4. API的String 一些用法
  5. 数据库名、实例名和ORACLE_SID的区别
  6. Java枚举(Enum)类型的基本介绍与原理探求
  7. 计算1970距今的秒数
  8. 解决AndroidStudio更新后在 Building gradle project info 一直卡住
  9. 5901和5909在P570中的功用
  10. 华为C语言编程规范(精华总结)
  11. 张小龙《微信背后的产品观》演讲文字版
  12. nProtect的一些知识
  13. 用Markdown画流程图
  14. mysql日期教程_Navicat for MySQL 设置日期时间栏位教程(图文)
  15. 数学之美——信息的度量
  16. Facebook名人软件Mentions有了Android版本
  17. 高职计算机考试试题与答案,2009高职高考计算机试题
  18. 光电技术与光纤基础期末复习笔记
  19. 程序员的职业素养 读书笔记 - 第6章 练习
  20. i5-10400+ 华硕(ASUS)TUF GAMING B460M-PLUS (WI-FI) +0.6.4oc引导实现完美黑苹果

热门文章

  1. 合唱队形java_动态规划之合唱队形问题
  2. [转载] C#开发实战1200例(第I卷)目录
  3. VOT2016配置 VOT tookit
  4. Banner框架实现图片轮播
  5. ZZULIOJ-1035,分段函数求值(Python)
  6. 漫话:如何给女朋友解释什么是RPC
  7. WARN: Establishing SSL connection without server‘s identity verification is not recommended. Acco...
  8. php生成临时文件,php生成zip压缩文件的方法详解
  9. 申请企业邮箱有哪些好处?企业邮箱优势盘点
  10. 节奏大师显示服务器,节奏大师上线首日登录困难 服务器拖累腾讯游戏