Advertisement
IISergeyII

Untitled

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