f[i]表示i只牛最后一只是*的方案数
f[i]=f[i-k-1]+f[i-k-2]+f[i-k-3]+……+f[0]
据说有排列组合做法?
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<iostream>
#define maxn 1000100
#define mod 5000011
using namespace std;
int f[maxn],sum[maxn];
int n,k;
int main()
{
scanf("%d%d",&n,&k);
f[0]=sum[0]=1;
for (int i=1;i<=n;i++)
{
if (i>k) f[i]=sum[i-k-1];
else f[i]=1;
sum[i]=(sum[i-1]+f[i])%mod;
}
printf("%d\n",sum[n]);
return 0;
}