Files
problemas-para-competicao-p…/flowers/src/alternative_ac.cpp
2025-11-27 22:25:18 -03:00

41 lines
1.0 KiB
C++

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int N, M;
const int MOD = 1e9 + 7;
ll memo[10001][1001][2];
ll flowers(int last, int count = 1, int size = 1) {
if (size == N) return 1;
/*
if sequences ends with X we have to cases:
if count(X) < M we can continue the sequence by appending another X in its end
we can also start and entirely new sequence starting with Y.
*/
if (memo[size][count][last] == 0) {
if (last == 0) {
if (count < M)
memo[size][count][0] += flowers(0, count + 1, size + 1);
memo[size][count][0] += flowers(1, 1, size + 1);
} else {
if (count < M)
memo[size][count][1] += flowers(1, count + 1, size + 1);
memo[size][count][1] += flowers(0, 1, size + 1);
}
}
return memo[size][count][last] %= MOD;
}
int main(){
cin >> N >> M;
memset(memo, 0, sizeof(memo));
cout << (flowers(0) + flowers(1)) % MOD << endl;
return 0;
}