bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——递推

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398

对于这种有点巧妙的递推还是总是没有思路...

设计一个状态 f[i] 表示第 i 位置上是公牛,那么 f[i] = ∑(0<=j<i-k) f[j];

再前缀和优化一下即可。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=1e5+5,mod=5000011;
int n,k,f[maxn],s[maxn];
int main()
{
    scanf("%d%d",&n,&k);
    f[0]=1;s[0]=1;
    for(int i=1;i<=n;i++)
    {
        f[i]=(s[max(0,i-k-1)])%mod;
        s[i]=(s[i-1]+f[i])%mod;
    }    
    printf("%d",s[n]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Zinn/p/9260217.html