Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <ctime>
- #include <cstdlib>
- #include <deque>
- #include <iostream>
- #include <map>
- #include <math.h>
- #include <queue>
- #include <set>
- #include <string>
- #include <unordered_map>
- #include <unordered_set>
- #include <vector>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- int fib[20];
- vector<int> p;
- void rec_gen(int n, int sum, int last_f, int k) {
- if (sum == n) {
- for (int i = 0; i < p.size(); ++i) {
- if (i != 0) cout << " + ";
- cout << p[i];
- }
- cout << '\n';
- return;
- }
- if (fib[last_f] > n) return;
- for (int i = 0; i <= k; ++i) {
- if (sum + i * fib[last_f] > n) break;
- rec_gen(n, sum + i * fib[last_f], last_f + 1, k);
- p.push_back(fib[last_f]);
- }
- while (p.size() && p.back() == fib[last_f]) p.pop_back();
- }
- int main() {
- #ifdef SYSTEM
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- int n, k;
- cin >> n >> k;
- fib[0] = 1;
- fib[1] = 2;
- for (int i = 2; i < 20; ++i) {
- fib[i] = fib[i - 1] + fib[i - 2];
- }
- rec_gen(n, 0, 0, k);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment