bzoj3398[Usaco2009 Feb]Bullcow 牡牛和牝牛
题意:
n头牛,其中有牡牛和牝牛两种,要求任意两只牡牛中要有k只牝牛,问几种方案。n≤100000
题解:
dp。f[i]表示第i头牛为牡牛的方案数,f[i]=sigma(j,1,i-k-1)f[j],这个可以用前缀和维护,最后答案为sigma(i,1,n)f[i]。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define inc(i,j,k) for(int i=j;i<=k;i++) 5 #define maxn 100100 6 #define mod 5000011 7 using namespace std; 8 9 int n,k,sm[maxn],f; 10 int main(){ 11 scanf("%d%d",&n,&k); sm[0]=1; 12 inc(i,1,n){ 13 if(i<=k)f=1;else f=sm[i-k-1]; 14 sm[i]=(sm[i-1]+f)%mod; 15 } 16 printf("%d",sm[n]); 17 }
20160811
时间: 2024-12-17 11:46:29