yzm10与大富翁的故事

Description

这款《大富翁》游戏曾经是我的启蒙桌游之一,印象最深的就是那一叠叠花花绿绿的钞票,还有和小伙伴从欢乐买地到撕逼掀桌的搞笑回忆~

当你的对手在一整条街上开满了旅馆(经过时要交过路费),每一次掷骰子都会心惊胆战,一不小心就会损失一个亿的感觉(╯▔皿▔)╯。

最近在逛桌游店的时候,我又忍不住上前搓了一把。

在购买地产、缴纳地税或交过路费时,往往需要支付一定的金额,我们需要用手中的钞票组合出恰好能支付金额的钱数,满足a[1]+a[2]+...+a[k]=M。

眼下我又来到了死亡一条街...看着小伙伴得意洋洋的样子,我心有不甘地拿出了钞票。

当然了支付时还是有一定技巧的,在选择面值时,尽可能选大额的钞票,这样就可以保证剩下足够多的零钱,有更多的金额组合形式,从而减少了不必要的浪费。这里你只需保证让最小的面值尽可能大即可。

现在告诉你初始时yzm10手里各张钞票的面值,你能猜出他是怎么支付的吗?

Input

第一行给出两个正整数:N(1<=N<=10^4)是yzm10手中的钞票数,M(1<=M<=100)是需要支付的金额。

第二行给出N张钞票的非负整数面值(保证在int范围内),数字间以空格分隔。

Output

在一行中按升序输出所需支付的各张钞票的面值,保证让最小的面值尽可能大,数字间以空格分隔。

若无法恰好凑出金额(不足或浪费),则输出-1。

Sample Input 1

4 10
2 3 7 8

Sample Output 1

3 7

Sample Input 2

5 10
2 3 4 4 5

Sample Output 2

2 4 4

Sample Input 3

2 10
5 11

Sample Output 3

-1

Hint

答案可能不唯一,本题采用special judge,输出任意一种即可。

样例1有两种取法(2,8)(3,7),2<3,选第二种。

样例2有两种取法(2,3,5)(2,4,4),因为最小值都为2,两种均满足条件。

题意:中文题,不解释了,表示暑假训练最后一周没认真做,纳新题出了个输出路径的,一脸懵逼。。。

题解:01背包加输出路径,从大往小装可以保证最小面值最大,因为从大的开始装,所以最后倒着输出,可以保证升序输出,这样就不用排序了。 请看代码:

#include <iostream>
#include <algorithm>
using namespace std;
const int MAX1 = 1e4+10;
const int MAX2 = 200; //数组都开到1e+4+10,会报错(Runtime error)注意这里,很坑!!!
int a[MAX1],dp[MAX2];
int vis[MAX1][MAX2];
bool cmp(int x,int y){return x>y;
}
int main(){int n,m;cin >> n >> m;for (int i = 1; i <= n;i++){cin >> a[i];}sort(a+1,a+n+1,cmp);for (int i = 1; i <= n;i++){//01背包模板for (int j = m; j >= a[i];j--){if(dp[j]<dp[j-a[i]]+a[i]){vis[i][j]=1;dp[j]=dp[j-a[i]]+a[i];}}}if(dp[m]!=m) cout << -1 << endl;else{int i=n,f=0;while(m){//输出路径模板if(vis[i][m]){if(f==0) f=1;else cout << " ";cout << a[i];m-=a[i];}i--;}cout << endl;}return 0;
}

qdu yzm10与大富翁的故事 (01背包+输出路径)相关推荐

  1. vijos 1071 01背包+输出路径

    描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:"这副牌少了几张!"众人一 ...

  2. 01背包输出路径、完全背包、多重背包

    背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...

  3. 【01背包记录路径】东东开车了

    题面 东东开车出去泡妞(在梦中),车内提供了 n 张CD唱片,已知东东开车的时间是 n 分钟,他该如何去选择唱片去消磨这无聊的时间呢 假设: CD数量不超过20张 没有一张CD唱片超过 N 分钟 每张 ...

  4. ☆【UVA - 624 】CD(dp + 0-1背包 + 记录路径)

    题干: You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music ...

  5. Hrbust 1836 2012世界末日【01背包+反路径输出】

    2012世界末日 Time Limit: 1000 MS Memory Limit: 65535 K Total Submit: 38(16 users) Total Accepted: 12(11 ...

  6. 【CCCC】L3-001 凑零钱 (30分),,01背包路径打印

    problem L3-001 凑零钱 (30分) 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 ...

  7. hiho一下 第六周 Hihocoder #1038 : 01背包

    题目1 : 01背包 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 且说上一周的故事里,小Hi和小Ho费劲心思终于拿到了茫茫多的奖券!而现在,终于到了小Ho领取奖励的时 ...

  8. 1038 01背包动态规划

    #1038 : 01背包 #include <iostream> #include <stdio.h> #include <algorithm>using name ...

  9. NOJ--宠物小精灵之收服(01背包,二维费用背包问题)

    宠物小精灵之收服 1000ms  65536K Description: 宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事. 一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵 ...

  10. 0-1背包、部分背包和完全背包模板

    一:0-1背包 当数据是实数时,乘个数使它变成整数.如3.22->3.22*100=322; 理解模板: #include<cstdio> #include<iostream& ...

最新文章

  1. SP5971 LCMSUM
  2. 嵌入式Linux常用文件系统
  3. Python源码阅读-内存管理机制(二)
  4. java实现人脸识别源码【含测试效果图】——Dao层(BaseDao)
  5. javascript指南_JavaScript的完整指南
  6. __name__ == '__main__'
  7. tidyr | 批量处理数据的前奏——数据嵌套化
  8. C 数据类型 常量 变量
  9. MyBatis和Hibernate的优缺点对比。
  10. AndroidSDK下载及安装
  11. fastlane二开java_Fastlane 使用手册(二)
  12. PMP-PMBOK图解项目管理(436页PPT、完整版-经典)
  13. SparkOutOfMemoryError: Unable to acquire 65536 bytes of memory, got 0
  14. 第一个iOS应用 —— Hello world!
  15. U-BOOT 下载 GitHub
  16. OpenHarmony编译系统
  17. 计算机控制课设直流电机控制,计算机控制系统课程设计 直流电机测速调速系统 (精选可编辑)...
  18. Android 集成百度地图之申请TTS授权最新版
  19. Python黑马头条推荐系统第一天 架构介绍和离线计算更新Item画像
  20. vue 的axios 文件上传

热门文章

  1. 费马小定理和欧拉定理作业
  2. 2016民用安防2.0时代重新起航
  3. Python-Pandas-Excel/CSV 数据处理大全整理 (二)
  4. 邮箱前台html,WEB独特的邮箱
  5. 人脸识别最全综述:详解人脸识别技术、人才、趋势
  6. java中合并不同子目录下的txt文件(CHM转换成txt的过程)
  7. 2022年起重机械指挥特种作业证考试题库及答案
  8. 第二次作业—时事点评
  9. Ubuntu 16.04与Win10双系统双硬盘安装图解
  10. 【Structure Light】reading notes(一)