【bzoj3398】[Usaco2009 Feb]Bullcow 牡牛和牝牛 dp

f[i]表示i只牛最后一只是*的方案数

f[i]=f[i-k-1]+f[i-k-2]+f[i-k-3]+……+f[0]

据说有排列组合做法?


#include
#include
#include
#include
#include
#include
#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;
}


你可能感兴趣的:(动态规划)