Advertisement
IISergeyII

Untitled

May 20th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <math.h>
  5. #include <vector>
  6. #include <fstream>
  7.  
  8. using namespace std;
  9. void BackTracking(int nCoin);
  10.  
  11. int N, M;
  12.  
  13.  
  14. vector<int> ans;
  15. vector<int> coinsIn;
  16.  
  17. void doSearch(int nCoin, long long sum, vector<int> &usedCoins) {
  18.     //cout << "nCoin " << nCoin << " summ " << sum << " N " << N << " M " << M << endl;
  19.     if (nCoin >= M) return;
  20.     if (sum > N) return;
  21.  
  22.  
  23.  
  24.     if (sum == N) {
  25.         if ( ans.empty() || usedCoins.size() < ans.size() ) {
  26.             ans = usedCoins;
  27.             /*for (int i = 0; i < usedCoins.size(); i++) {
  28.                 cout << usedCoins[i] << " ";
  29.             }
  30.             cout << endl;*/
  31.         }
  32.         return;
  33.     }
  34.  
  35.     for (int i = 0; i <= 2; ++i) {
  36.         if (i != 0) {
  37.             usedCoins.push_back(coinsIn[nCoin]);
  38.             if (i == 2) usedCoins.push_back(coinsIn[nCoin]);
  39.         }
  40.  
  41.         /*cout << "====================" << endl;
  42.  
  43.         for (int i = 0; i < usedCoins.size(); i++) {
  44.                 cout << usedCoins[i] << " ";
  45.             }
  46.             cout << endl;*/
  47.  
  48.         doSearch(nCoin+1, sum + i * coinsIn[nCoin], usedCoins);
  49.  
  50.  
  51.         if (i != 0) {
  52.             usedCoins.pop_back();
  53.             if (i == 2) usedCoins.pop_back();
  54.         }
  55.  
  56.  
  57.         /*for (int i = 0; i < usedCoins.size(); i++) {
  58.                 cout << usedCoins[i] << " ";
  59.             }
  60.             cout << endl;*/
  61.  
  62.         //cin.get();
  63.     }
  64.  
  65. }
  66.  
  67. int main()
  68. {
  69.     long long sum;
  70.     cin >> N >> M;
  71.  
  72.  
  73.     for (int i = 0; i < M; ++i) {
  74.         int t;
  75.         cin >> t;
  76.         coinsIn.push_back(t);
  77.         sum += t*2;
  78.     }
  79.  
  80.     if (sum < N) {
  81.         cout << "-1";
  82.     } else {
  83.         vector<int> usedCoins;
  84.         doSearch(0, 0, usedCoins);
  85.  
  86.        
  87.         cout << ans.size()<< endl;
  88.         for (int i = 0; i < ans.size(); i++) {
  89.             cout << ans[i] << " ";
  90.         }
  91.     }
  92.  
  93.  
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement