排列组合计数 1.两个b中隔k个a
1.两个b中隔k个a 牡牛和牝牛 https://www.acwing.com/problem/content/1309/
约翰决定任意两只牡牛之间至少要有 K 只牝牛。求组合的方案书 dp
f[i]集合:考虑前i头牛,且第i头牛是1的方案 由f[0]...f[i-k-1]转移过来
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010, mod = 5000011;
int n, k;
int f[N], s[N];
int main()
{
cin >> n >> k;
f[0] = s[0] = 1;
for (int i = 1; i <= n; i ++ )
{
f[i] = s[max(i - k - 1, 0)];
s[i] = (s[i - 1] + f[i]) % mod;//通过前缀和 n方优化到n
}
cout << s[n] << endl;
return 0;
}