加载中...

排列组合计数 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;
}

posted @ 2022-08-15 16:34  liang302  阅读(21)  评论(0编辑  收藏  举报