Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <algorithm>
- #include <math.h>
- #include <vector>
- #include <fstream>
- using namespace std;
- void BackTracking(int nCoin);
- int N, M;
- vector<int> ans;
- vector<int> coinsIn;
- void doSearch(int nCoin, long long sum, vector<int> &usedCoins) {
- //cout << "nCoin " << nCoin << " summ " << sum << " N " << N << " M " << M << endl;
- if (nCoin >= M) return;
- if (sum > N) return;
- if (sum == N) {
- if ( ans.empty() || usedCoins.size() < ans.size() ) {
- ans = usedCoins;
- /*for (int i = 0; i < usedCoins.size(); i++) {
- cout << usedCoins[i] << " ";
- }
- cout << endl;*/
- }
- return;
- }
- for (int i = 0; i <= 2; ++i) {
- if (i != 0) {
- usedCoins.push_back(coinsIn[nCoin]);
- if (i == 2) usedCoins.push_back(coinsIn[nCoin]);
- }
- /*cout << "====================" << endl;
- for (int i = 0; i < usedCoins.size(); i++) {
- cout << usedCoins[i] << " ";
- }
- cout << endl;*/
- doSearch(nCoin+1, sum + i * coinsIn[nCoin], usedCoins);
- if (i != 0) {
- usedCoins.pop_back();
- if (i == 2) usedCoins.pop_back();
- }
- /*for (int i = 0; i < usedCoins.size(); i++) {
- cout << usedCoins[i] << " ";
- }
- cout << endl;*/
- //cin.get();
- }
- }
- int main()
- {
- long long sum;
- cin >> N >> M;
- for (int i = 0; i < M; ++i) {
- int t;
- cin >> t;
- coinsIn.push_back(t);
- sum += t*2;
- }
- if (sum < N) {
- cout << "-1";
- } else {
- vector<int> usedCoins;
- doSearch(0, 0, usedCoins);
- cout << ans.size()<< endl;
- for (int i = 0; i < ans.size(); i++) {
- cout << ans[i] << " ";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement