L3-001. 凑零钱

时间限制:200 ms
内存限制:65536 kB
代码长度限制:8000 B
判题程序:Standard
作者:陈越

韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是否可能精确凑出要付的款额。

输入格式:

输入第一行给出两个正整数:N(<=104)是硬币的总个数,M(<=102)是韩梅梅要付的款额。第二行给出N枚硬币的正整数面值。数字间以空格分隔。

输出格式:

在一行中输出硬币的面值 V1 <= V2 <= … <= Vk,满足条件 V1 + V2 + … + Vk = M。数字间以1个空格分隔,行首尾不得有多余空格。若解不唯一,则输出最小序列。若无解,则输出“No Solution”。

注:

我们说序列{A[1], A[2], …}比{B[1], B[2], …}“小”,是指存在 k >= 1 使得 A[i]=B[i] 对所有 i < k 成立,并且 A[k] < B[k]。

输入样例1:

8 9
5 9 8 7 2 3 4 1

输出样例1:

1 3 5

输入样例2:

4 8
7 2 4 3

输出样例2:

No Solution

问题分析

学长和窝说这是01背包的变种布尔背包…….
题意:给n个硬币,问能否组成价值m。
那该怎么设计状态呢?
我感觉就是01背包的思想。可以这样,第i个硬币能否组成m,如果第i个硬币可以组成m,那么状态dp[j-coin[i]肯定就为true,否则为false,即表示当前硬币不可达m。如果选第i个,那么问题就变成i-1个硬币组成v-coin[i]的问题,不选就是i-1个硬币组成v的问题。边界状态肯定是硬币价值为0啦,0对于m一定是可达的,所以要初始dp[0] = true;所以状态转移方程为
dp[i][j] = dp[i-1][j] | dp[i-1][j-coin[i]]; 或者简化为一维,
dp[j] = dp[j] | dp[j-coin[i]]; (0 <= i <= n-1, 0 <= j <= m)

剩下的就是路径记录问题了,只要记住当前状态是由哪个状态转移过来的即可,输出coin[i]
ok,接下来是AC code(^_^)

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const  int N = 1e4+3,M = 400;
bool path[N][M],dp[N];
int coin[N];
bool cmp(int a,int b){return a>b;
}int main()
{int n,m;cin>>n>>m;for(int i = 0; i < n; ++i){cin>>coin[i];}dp[0] = true; //m+0一定还可以组成m,即0这个数可达(边界状态)sort(coin,coin+n,cmp); //这里我们从大到小排序,方便输出,到后面如果有更小的方案会覆盖for(int i = 0; i < n; ++i){for(int j = m; j >= coin[i]; j--){
//            dp[j] = dp[j]|dp[j-coin[i]];if(dp[j-coin[i]]){ // 如果当前选择当前硬币可组成mdp[j] = true;path[i][j] = true; //记录路径}}}if(dp[m]==false) cout<<"No Solution"<<endl;else{int i = n-1, j = m, flag = 0;while (i>=0&&j>=0){if(path[i][j]){ //当前状态可选if(flag==0) { printf("%d",coin[i]); flag = 1;}elseprintf(" %d",coin[i]);j -= coin[i]; //要清楚当前状态是怎么转移过来的}i--;}puts("");}return 0;
}

PAT L3-001 凑零钱(01背包(布尔背包)+记录路径)相关推荐

  1. UVA 624 CD(01背包,要记录路径)

    题意: 有n张CD(n<=20),每张能播放的时长不同.给定一个时长限制t,挑出部分的CD使得总播放时间最长.顺便输出路径! 思路: 重点在输出路径,否则这题很普通.那就要用二维数组记录每个CD ...

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

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

  3. PAT 团体程序设计天梯赛-练习集 题解(凑零钱,堆栈,社交集群)

    开始准备cccc(cry)天梯赛了,第一周训练题,把官网挂出的训练题刷完了,对pat有了一点点的熟悉感. L1-1  就不说了... L1-2 打印沙漏 一个变量保存空格数,一个变量保存沙漏符号数,打 ...

  4. L3-001. 凑零钱

    L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...

  5. 经典背包问题 01背包+完全背包+多重背包

    01 背包 有n 种不同的物品,每个物品有两个属性,size 体积,value 价值,现在给一个容量为 w 的背包,问最多可带走多少价值的物品. int f[w+1]; //f[x] 表示背包容量为x ...

  6. 7-2 凑零钱 (30 分)

    韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 10410 ^4104枚来自各个星球的硬币,需要请 ...

  7. L3-001 凑零钱(dfs+玄学剪枝=AC)

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

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

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

  9. 动态规划_背包问题(01背包 完全背包)

    背包问题-多种物品 重量不同 价值不同. 你可以取最多重量不超过W的物品,问最大价值为多少? 01背包 01背包 指的是 有N个物品 每个物品的重量为W[ i ],价值为V[ i ],(每个物品只有一 ...

  10. L3-001. 凑零钱(dfs + 各种剪枝)

    L3-001. 凑零钱 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现 ...

最新文章

  1. 双水泵轮换工作原理图_「物业管理工作」水泵维护保养规程
  2. 你曾经是那手握烙铁的少年
  3. php导出mongo日志,导出mongo库到本地
  4. sap 预制凭证与暂存凭证的区别
  5. ASP.NET MVC 整合 Spring.net(1)- Controller进容器
  6. 事实--思维导图笔记
  7. tess4j 注意事项
  8. pillow是python的图像处理标准库_详解Python图像处理库Pillow常用使用方法
  9. 微软MVC对架构的一点思考
  10. 敏捷开发任务看板_看板方法的进化论:从丰田精益方法到敏捷研发
  11. 问题六十八:BRDF——(着色模型(shading model)(1)——反射模型(reflection model)(3.2))
  12. Linux查询存储信息,查询存储系统信息 - OceanStor UltraPath for Linux 21.5.0 用户指南 02 - 华为...
  13. android中一些特殊字符的使用(如:←↑→↓等箭头符号)
  14. voip和rtc_VoIP语音通话研究【进阶篇(四):freeswitch+webrtc+sip.js的通话】
  15. gazebo仿真环境搭建+配置+小车运动仿真
  16. 四大险种之间有什么区别?理赔会冲突吗?
  17. http简介以及常见知识和http请求头,响应头,状态码,内容类型对照表分享(超实用)
  18. 【学习OpenCV4】案例1:Windows OpenCV C++语言开发环境搭建
  19. 牛客网SQL大厂面试真题(一)
  20. 13种Java核心技术

热门文章

  1. java解惑之最后的笑声
  2. centos 7 系统安装
  3. E - Skyscrapers (hard version)
  4. matplotlib.pyplot.hist()绘制直方图
  5. python海龟绘图颜色_海龟绘图
  6. uniapp接入支付宝登录及订阅消息教程
  7. 三、Linux 教程-基础命令(181~完)
  8. 一文带你搞懂Python中的文件操作
  9. 微信小号来了!同一个手机号可注册两个微信号
  10. 网线传输速度测试_千兆网络的速度测试