Vserosbuybuy

Task

Oct 8th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <algorithm>
  2. #include <ctime>
  3. #include <cstdlib>
  4. #include <deque>
  5. #include <iostream>
  6. #include <map>
  7. #include <math.h>
  8. #include <queue>
  9. #include <set>
  10. #include <string>
  11. #include <unordered_map>
  12. #include <unordered_set>
  13. #include <vector>
  14.  
  15. using namespace std;
  16.  
  17. typedef long long ll;
  18. typedef long double ld;
  19.  
  20. int fib[20];
  21. vector<int> p;
  22.  
  23. void rec_gen(int n, int sum, int last_f, int k) {
  24.     if (sum == n) {
  25.         for (int i = 0; i < p.size(); ++i) {
  26.             if (i != 0) cout << " + ";
  27.             cout << p[i];
  28.         }
  29.         cout << '\n';
  30.         return;
  31.     }
  32.     if (fib[last_f] > n) return;
  33.     for (int i = 0; i <= k; ++i) {
  34.         if (sum + i * fib[last_f] > n) break;
  35.         rec_gen(n, sum + i * fib[last_f], last_f + 1, k);
  36.         p.push_back(fib[last_f]);
  37.     }
  38.     while (p.size() && p.back() == fib[last_f]) p.pop_back();
  39. }
  40.  
  41. int main() {
  42. #ifdef SYSTEM
  43.     freopen("input.txt", "r", stdin);
  44.     freopen("output.txt", "w", stdout);
  45. #endif
  46.     ios_base::sync_with_stdio(false);
  47.     cin.tie(0);
  48.     int n, k;
  49.     cin >> n >> k;
  50.     fib[0] = 1;
  51.     fib[1] = 2;
  52.     for (int i = 2; i < 20; ++i) {
  53.         fib[i] = fib[i - 1] + fib[i - 2];
  54.     }
  55.     rec_gen(n, 0, 0, k);
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment