Advertisement
IISergeyII

Untitled

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