Infiniti_Inter

money_2

Nov 29th, 2019
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <fstream>
  5. #include <exception>
  6. #include <vector>
  7. using namespace std;
  8.  
  9.  
  10.  
  11. vector<int> ans;
  12. vector<int> nom;
  13. vector<int> cnt;
  14.  
  15.  
  16.  
  17.  
  18. void say(int n)
  19. {
  20.     cout << "solution: \n";
  21.     for (int i = 0; i < n; ++i)
  22.     {
  23.         if (ans[i])
  24.             cout << ans[i] << ' ' << nom[i] << endl;
  25.     }
  26. }
  27.  
  28. int sum = 0;
  29. bool fl = false;
  30. const int INF = 1e9 + 13;
  31.  
  32. void solve(int s, int current = 0)
  33. {
  34.     if (current == sum)
  35.     {
  36.         say(s);
  37.         sum = INF;
  38.         fl = true;
  39.     }
  40.     if (s == ans.size() || nom[s] > sum || fl)
  41.         return;
  42.    
  43.     // запуск при количестве купюр = 0
  44.     solve(s + 1, current);
  45.  
  46.     for (int i = 1; i <= cnt[s]; ++i)
  47.     {
  48.         ans[s] = i;
  49.         current += nom[s];
  50.         if (current > sum)
  51.         {
  52.             ans[s] = 0;
  53.             return;
  54.         }
  55.         solve(s + 1, current);
  56.     }
  57.     ans[s] = 0;
  58.  
  59. }
  60.  
  61.  
  62.  
  63. int main()
  64. {
  65.     freopen("input.txt", "r", stdin);
  66.     freopen("output.txt", "w", stdout);
  67.  
  68.     int k;
  69.     cin >> k;
  70.     nom.resize(k);
  71.     ans.resize(k);
  72.     cnt.resize(k);
  73.     for (int i = 0; i < k; ++i)
  74.         cin >> nom[i];
  75.     for (int i = 0; i < k; ++i)
  76.         cin >> cnt[i];
  77.     cin >> sum;
  78.     solve(0);
  79.  
  80. }
Add Comment
Please, Sign In to add comment