1. 程式人生 > >【DP】Bullcow

【DP】Bullcow

std 環境 llc 幫助 描述 想要 code 這一 int

描述

一年一度的展會要來臨了,農民約翰想要把N(1 <= N <= 100,000)只奶牛和公牛安排在單獨的一行中。 約翰發現最近公牛們非常好鬥;假如兩只公牛在這一行中靠的太近,他們就會吵架,以至於鬥毆,破壞這和諧的環境。約翰非常的足智多謀,他計算出任何兩只公牛之間至少要有K (0 <= K < N)只奶牛,這樣才能避免鬥毆。 約翰希望你幫助他計算一下有多少種安排方法,可避免任何鬥毆的的發生。約翰認為每頭公牛都是一樣的,每頭奶牛都是一樣的。因而,只要在一些相同的位置上有不同種類的牛,那這就算兩種不同的方法。

輸入

第一行:兩個用空格隔開的數:N和K

輸出

第一行:一個單獨的數,即約翰可以安排的方法數。考慮到這個數可能很大,你只要輸出mod 5,000,011之後的結果就可以了。

 1 #include <cstdio>
 2 #define MOD 5000011
 3 int n,k,f[100001][2];
 4 int main()
 5 {
 6     scanf("%d%d",&n,&k);
 7     f[1][0]=f[1][1]=1;
 8     for (int i=1;i<k;i++) f[i][1]=1;
 9     for (int i=2;i<=n;i++)
10     {
11         f[i][0]=(f[i-1][0]+f[i-1][1])%MOD;
12         if (i-k>=1
) f[i][1]=f[i-k][0];else f[i][1]=1; 13 } 14 printf("%d",(f[n][0]+f[n][1])%MOD); 15 }

【DP】Bullcow