傳送門:https://atcoder.jp/contests/abc156/tasks/abc156_e
題目大意:給你n個房間,每個房間里一個人。一次移動可以使得一個人移動到除本身外的任意一個房間里去。問k次移動之后,房間有多少種組合狀態(tài)。
例如: n = 3 , k = 2.
狀態(tài)有:(0,0,3),(0,3,0),(3,0,0),(0,1,2),(0,2,1),(1,2,0),(2,1,0),(1,1,1),(1,0,2),(2,0,1).
題目思路:
,任何局面可以達(dá)成,就是求不定方程非負(fù)整數(shù)解的個數(shù).我們可以用一一映射+插空法。答案為:
.等價于:
當(dāng)時我推到這里就卡住了。想用dp做,但是只能想出的.
因為我這里漏掉了一個很重要的條件: 未知數(shù)的個數(shù) = 所求的數(shù).
那么就意味著,當(dāng)存在著一個數(shù) >= k 時,那么必將至少有 k - 1 個空格產(chǎn)生.
所以上述條件可以轉(zhuǎn)換為:局面中存在有個空房間。
那么我們可以用總的減去不合法的,當(dāng)然也可以直接算。
空房間的組合情況為:
剩下來的房間最少都有1個人,那么可以直接插空法:
總答案為: