L3-001. 凑零钱-PAT团体程序设计天梯赛GPLT(01背包,动态规划)
韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有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背包问题,因为要输出从小到大的排列,可以先把硬币面额从大到小排列,然后用bool类型的choice[i][j]数组dp[i][j]是否选取,如果选取了就令choice为true;然后进行01背包问题求解,如果最后求解的结果不是恰好等于所需要的价值的,就输出No Soultion,否则从choice[i][j]判断选取的情况,i从n到1表示从后往前看第i个物品的选取情况,j从m到0表示从容量m到0是否选取(j = j - w[i]),把选取情况压入arr数组中,最后输出arr数组
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int dp[10010], w[10010];
bool choice[10010][10010];
int cmp1(int a, int b) { return a > b; }
int main() {int n, m;scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++)scanf("%d", &w[i]);sort(w + 1, w + n + 1, cmp1);for(int i = 1; i <= n; i++) {for(int j = m; j >= w[i]; j--) {if(dp[j] <= dp[j-w[i]] + w[i]) {choice[i][j] = true;dp[j] = dp[j-w[i]] + w[i];}}}if(dp[m] != m) printf("No Solution");else {vector<int> arr;int v = m, index = n;while(v > 0) {if(choice[index][v] == true) {arr.push_back(w[index]);v -= w[index];}index--;}for(int i = 0; i < arr.size(); i++) {if(i != 0) printf(" ");printf("%d", arr[i]);}}return 0;
}
L3-001. 凑零钱-PAT团体程序设计天梯赛GPLT(01背包,动态规划)相关推荐
- L2-005 集合相似度-PAT团体程序设计天梯赛GPLT
题目来源:团体程序设计天梯赛-练习集 题目地址:L2-005 集合相似度 题目大意 给定 nnn 个集合,然后有 kkk 次询问,每次询问都要求出 Nc/Nt×100%N_c / N_t \times ...
- L1-079 天梯赛的善良 (20 分)-PAT 团体程序设计天梯赛 GPLT
天梯赛是个善良的比赛.善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分. 于是命题组首先将编程能力划分成了 106个等级( ...
- L1-078 吉老师的回归 (15 分)-PAT 团体程序设计天梯赛 GPLT
曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦! 为了简化题目,我们不妨假设天梯赛的每道题目可以用一个不超过 500 的.只包括可打印符号的字符串描述出来,如:Problem A: Print &q ...
- [Python] L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT
2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...
- L1-052 2018我们要赢-PAT团体程序设计天梯赛GPLT
2018年天梯赛的注册邀请码是"2018wmyy",意思就是"2018我们要赢".本题就请你用汉语拼音输出这句话. 输入格式: 本题没有输入. 输出格式: 在第 ...
- L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至少存在一条可达路线. 输 ...
- L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT
本题是一部战争大片 -- 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...
- [Python] L1-045 宇宙无敌大招呼-PAT团体程序设计天梯赛GPLT
据说所有程序员学习的第一个程序都是在屏幕上输出一句"Hello World",跟这个世界打个招呼.作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼. 输入格式 ...
- [Python] L1-005. 考试座位号-PAT团体程序设计天梯赛GPLT
L1-005. 考试座位号 每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号 ...
最新文章
- 中学计算机老师 当领导可能性,求分享,当中学计算机老师带信息学奥赛是怎样的感受 - 信息科学技术学院(EECS)版 - 北大未名BBS...
- linux文件属性权限相关
- ajax 页面无刷新,Ajax的页面无刷新实现详解(附代码)
- 将文件中所有数读到一个数组中_「数据结构与算法」将5个文件中的一千万年龄合并到一个新文件中...
- mysql主从 毫秒_MySQL主从数据库同步延迟问题解决(转)
- 安卓9 怎么运行老程序_PLC怎么连接电脑?怎么把在电脑编程好的程序放入PLC运行?...
- Google金山词霸体验小记
- MongoDB 表结构分析工具介绍 -- Variety
- 销售订单无法使用折扣(其他可以正常使用)
- spring security原理图及其解释
- Chrome最新离线安装包下载
- 解决python的OverflowError: int too large to convert to float
- 【Java面试题】一次完整的Http请求过程(非常详细)
- linux下U盘为只读文件系统的解决办法
- pgloader mysql_pgloader 学习(四)一些简单操作例子
- 挺有意思的文章。。。
- Unsupported Modules Detected: Compilation is not supported for following modules: app, library. Unfo
- IDEA括起选中的选中的内容
- Square Destroyer UVA - 1603 IDA*
- AI TIME PhD实验室专场,四月隆重登场!