1068 Find More Coins (30分)(dp)
Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept all kinds of coins as payments. However, there was a special requirement of the payment: for each bill, she must pay the exact amount. Since she has as many as 1 coins with her, she definitely needs your help. You are supposed to tell her, for any given amount of money, whether or not she can find some coins to pay for it.
Input Specification:
Each input file contains one test case. For each case, the first line contains 2 positive numbers: N
(≤, the total number of coins) and M
(≤, the amount of money Eva has to pay). The second line contains N
face values of the coins, which are all positive numbers. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the face values
V1≤V2≤⋯≤Vk such that V1+V2+⋯+Vk=M
.
All the numbers must be separated by a space, and there must be no extra space at the end of the line. If such a solution is not unique, output the smallest sequence. If there is no solution, output "No Solution" instead.
Note: sequence {A[1], A[2], ...} is said to be "smaller" than sequence {B[1], B[2], ...} if there exists k≥1 such that A[i]=B[i] for all i<k, and A[k] < B[k].
Sample Input 1:
8 9
5 9 8 7 2 3 4 1
Sample Output 1:
1 3 5
Sample Input 2:
4 8
7 2 4 3
Sample Output 2:
No Solution
- 题目分析:读题后觉得这是一道动态规划 自己写的动态规划只过了4个测试点
- 查了别人的做法后 https://blog.csdn.net/qq_29762941/article/details/82903476
利用深度遍历优先也可以求解 而且正是因为需要最小的序列 利用dfs更容易求得
- #define _CRT_SECURE_NO_WARNINGS
- #include <climits>
- #include<iostream>
- #include<vector>
- #include<queue>
- #include<map>
- #include<set>
- #include<stack>
- #include<algorithm>
- #include<string>
- #include<cmath>
- using namespace std;
- int Array[];
- int N, M;
- vector<int> res, v;
- int flag = ;
- void dfs(int i,int sum,int &flag)
- {
- if (sum > M || flag == )
- return;
- if (sum == M && flag == )
- {
- res = v;
- flag = ;
- return;
- }
- for (int index = i; index < N; index++) {
- v.push_back(Array[index]);
- dfs(index + , sum + Array[index], flag);
- v.pop_back();
- }
- }
- int main()
- {
- cin >> N >> M;
- int total=;
- for (int i = ; i < N; i++)
- {
- cin >> Array[i];
- total += Array[i];
- }
- if (total < M)
- {
- cout << "No Solution";
- return ;
- }
- sort(Array, Array + N);
- dfs(, , flag);
- if (!flag)
- cout << "No Solution";
- else
- {
- int i = ;
- for (; i < res.size() - ; i++)
- cout << res[i] << " ";
- cout << res[i];
- }
- }
动态规划的方法 看了柳神的博客
- #define _CRT_SECURE_NO_WARNINGS
- #include <climits>
- #include<iostream>
- #include<vector>
- #include<queue>
- #include<map>
- #include<set>
- #include<stack>
- #include<algorithm>
- #include<string>
- #include<cmath>
- #include<string.h>
- using namespace std;
- int Array[];
- int N, M;
- vector<int> res;
- int dp[][];
- bool choice[][];
- bool compare(int a, int b) { return a > b; }
- void solve() {
- sort(Array, Array + N, compare);
- memset(dp, -, sizeof(dp));
- memset(dp, false, sizeof(choice));
- for(int i=;i<N;i++)
- for (int j = ; j <= M; j++) {
- if (j < Array[i])
- dp[i + ][j] = dp[i][j];
- else if (dp[i][j] > dp[i][j - Array[i]] + Array[i])
- dp[i + ][j] = dp[i][j];
- else
- {
- choice[i][j] = true;
- dp[i + ][j] = dp[i][j - Array[i]] + Array[i];
- }
- }
- if (dp[N][M] != M)
- cout << "No Solution";
- else {
- int i = N, j = M;
- while (i>=)
- {
- if (choice[i][j]) {
- res.push_back(Array[i]);
- j -= Array[i];
- }
- i--;
- }
- for (int i = ; i < res.size() - ; i++)
- cout << res[i] << " ";
- cout << res[res.size() - ];
- }
- }
- int main()
- {
- cin >> N >> M;
- for (int i = ; i < N; i++)
- cin >> Array[i];
- solve();
- return ;
- }
1068 Find More Coins (30分)(dp)的更多相关文章
- PAT 甲级 1068 Find More Coins (30 分) (dp,01背包问题记录最佳选择方案)***
1068 Find More Coins (30 分) Eva loves to collect coins from all over the universe, including some ...
- 【PAT甲级】1068 Find More Coins (30 分)(背包/DP)
题意: 输入两个正整数N和M(N<=10000,M<=10000),接着输入N个正整数.输出最小的序列满足序列和为M. AAAAAccepted code: #define HAVE_ST ...
- PAT甲题题解-1068. Find More Coins (30)-dp,01背包
一开始没多想,虽然注意到数据N<=10^4的范围,想PAT的应该不会超时吧,就理所当然地用dfs做了,结果最后一组真的超时了.剪枝啥的还是过不了,就意识到肯定不是用dfs做了.直到看到别人说用0 ...
- 1068 Find More Coins (30)(30 分)
Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...
- PAT (Advanced Level) 1068. Find More Coins (30)
01背包路径输出. 保证字典序最小:从大到小做背包. #include<cstdio> #include<cstring> #include<cmath> #inc ...
- 1068. Find More Coins (30)
题目如下: Eva loves to collect coins from all over the universe, including some other planets like Mars. ...
- L3-020 至多删三个字符 (30 分)(DP)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805046946938880 学习地址: 2018CCCC-L3 ...
- PAT 1068 Find More Coins[dp][难]
1068 Find More Coins (30)(30 分) Eva loves to collect coins from all over the universe, including som ...
- PAT 甲级 1068 Find More Coins(0,1背包)
1068. Find More Coins (30) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva l ...
随机推荐
- css 一行自适应等比例布局
一.浮动布局+百分比 .row { width:100%; overflow:hidden; zoom:1; } .item { float: left; width: 20%; } 该样式兼容性较好 ...
- 为.net Core 3.0 WebApi 创建Linux守护进程
前言 我们一般可以在Linux服务器上执行 dotnet <app_assembly.dll> 命令来运行我们的.net Core WebApi应用.但是这样运行起来的应用很不稳定,关闭终 ...
- R的plotmath
plotmath plotmath {grDevices}:Mathematical Annotation in R # Copyright (C) 2002-2016 The R Core Team ...
- ReentrantReadWriteLock源码探究
ReentrantReadWriteLock实现了可重入的读锁和写锁,其中读锁是共享锁,写锁是互斥锁.与ReentrantLock类似,ReentrantReadWriteLock也提供了公平锁和非公 ...
- no parameterless constructor define for type 解决一例
在生成根据模型和上下文生成带增删查改操作的视图的控制器时,提示上述信息,网上查找了资料也没有解决,突然想起该项目是连接MSSQL数据库和Redis数据库的,并且已经依赖注入了,而Redis数据库的服务 ...
- canvas.toDataURL()报错的解决方案全都在这了
报错详尽信息 Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases ...
- 使用VirtualBox 版本 6.1.2 r135662, 安装ubuntu18
VDI是VirtualBox的基本且独有的格式.目前应该还没有支持这种格式的其他软件. VMDK是专门为VMWare开发,但其他虚机像Sun xVM,QEMU,VirtualBox,SUSE Stud ...
- Convert JS object to JSON string
Modern browsers (IE8, FF3, Chrome etc.) have native JSON support built in (Same API as with JSON2). ...
- centos7单机安装kafka
基础要求操作系统:CentOS 7x 64位 kafka版本:kafka_2.11-0.8.2.1 #安装使用的jdk以及kafka的包我放到百度云了,需要自取. # 链接:https://pan.b ...
- 自签SSL证书
0.介绍 自己开发的使用了SSL协议的软件,通常没必要从证书签发机构那里来获取证书,自签证书成了必要的选择.自签证书还可以用来实现客户端登录认证. 1.创建CA 创建CA的私钥 openssl gen ...