約翰要帶 n 只牛去參加集會裡的展示活動,這些牛可以是牡牛,也可以是牝牛。
牛們要站成一排,但是牡牛是好鬥的,為了避免牡牛鬧出亂子,約翰決定任意兩隻牡牛之間至少要有 k 只牝牛。
請計算一共有多少種排隊的方法,所有牡牛可以看成是相同的,所有牝牛也一樣,答案對 5000011 取模。
輸入格式
一行,輸入兩個整數 n 和 k。
輸出格式
乙個整數,表示排隊的方法數。
資料範圍
1 ≤n
≤105
1≤n≤10^5
1≤n≤10
5,0 ≤k
<
n0≤k0≤
k<
n輸入樣例:
4 2輸出樣例:
6樣例解釋
6 種方法分別是:牝牝牝牝,牡牝牝牝,牝牡牝牝,牝牝牡牝,牝牝牝牡,牡牝牝牡。
感覺從此做組合數學有了新的思路。因為組合數學也是遞推關係。所以我們用dp的方法來推。我們f(i
)f(i)
f(i)
代表我們長度為i並且以1結尾的字串的方案數。我們這裡把牛當成0和1來看。
顯然我們第i個位置放了1,那麼最近的乙個放1的位置就是i-k-1直到0都是可以放1的,第0個位置放1就代表這個序列不包含1。這裡看來我們每個位置放1的方案數加起來就可以了。但是資料是105
10^5
105n方顯然是不可以的,考慮題目中是字首和的形式,所以我們邊記錄邊加字首和就可以了。
#include
//#define int long long
using
namespace std;
const
int n=
100010
;const
int mod=
5000011
;int n,k;
int f[n]
,s[n]
;int
main()
cout<
}
組合計數 牡牛和牝牛
約翰要帶 nn 只牛去參加集會裡的展示活動,這些牛可以是牡牛,也可以是牝牛。牛們要站成一排,但是牡牛是好鬥的,為了避免牡牛鬧出亂子,約翰決定任意兩隻牡牛之間至少要有 kk 只牝牛。請計算一共有多少種排隊的方法,所有牡牛可以看成是相同的,所有牝牛也一樣,答案對 50000115000011 取模。輸入...
bzoj 3398 牡牛和牝牛
牝 pin 4聲 母的意思。牡 mu 3聲 公的意思。看到這些字我直接愣了,其實放在牝雞司晨和牡蠣這兩個詞裡我絕對能認出來。是不是該去頹語文了?這道題f i 表示最後乙個是公牛的方案數,sigma f j j問題是hzwer用了奇怪的排列組合。這道題可以用隔板法,設abcd是放公牛的位置,那麼a,b...
BZOJ3398 牡牛和牝牛
time limit 1 sec memory limit 128 mb submit 440 solved 301 約翰要帶n 1 n 100000 只牛去參加集會裡的展示活動,這些牛可以是牡牛,也可以是牝牛 牛們要站成一排 但是牡牛是好鬥的,為了避免牡牛鬧出亂子,約翰決定任意兩隻牡牛之間至少要有...