隨便說說的題

2021-10-09 06:13:34 字數 2176 閱讀 7270

題目描述

兔子,兔子,和很多新的兔子。

乙隻兔子每天會生下 k

kk 只兔子。生下來的小兔子,從第二天開始就會變成大兔子,並且生產。

舉例,k=1

k=1k=

1 時,兔子數量在前三天分別是:1

11 只兔子;1

11 隻大兔、1

11 只小兔;2

22 隻大兔、2

22 只小兔。

現在蘇蘇正在研究這群兔子。他發現一些兔子窩。有 n

in_i

ni​ 只兔子的窩。他在想,所有兔子肯定都是從外面到來的,然後不再離開,並在這個窩裡繼續繁殖。有多少種不同的情況呢?

兩種情況不同,當且僅當某一天到來的兔子數量不同。可以認為時間軸無限長。

舉例,ni=

5n_i=5

ni​=

5 而 k=1

k=1k=

1 時,可能是:前天來了乙隻兔子,今天來了乙隻兔子;昨天來了兩隻兔子,今天來了乙隻兔子;今天來了五隻兔子。

輸入格式

第一行兩個整數 k,t

k,tk,

t ,分別表示兔子的生育能力,兔子窩的數量。

接下來 t

tt 行,每行乙個整數 n

in_i

ni​ ,表示這個兔子窩的數量。

輸出格式

共 t

tt 行,每行乙個整數,表示不同的兔子到來情況的數量,輸出時取模 109

+7

10^9+7

109+7 。

資料範圍與提示

因為兔子不能斷子絕孫,所以 1≤k

1\le k

1≤k 。因為兔子不可能無限制繁殖,所以 k≤1

09

k\le 10^9

k≤109 。

因為兔子窩太多,蘇蘇也忙活不過來,所以 t≤1

06

t\le 10^6

t≤106 。

因為兔子數量太多,蘇蘇就數不清了,所以他只會告訴你 ni≤

10

6n_i\le 10^6

ni​≤10

6 的兔子窩。

看上去題目那麼長,其實就是道簡單的揹包題 ?

因為 x(x

≥0

)x(x\ge 0)

x(x≥0)

天前來到的兔子,到今天就已經變成了 (k+

1)

x(k+1)^x

(k+1)x

只。問題轉變為,求將 n

nn 分解為 (k+

1)

(k+1)

(k+1

) 的冪作和,方案數幾何。

考慮 d

p\tt dp

dp,用 f(n

)f(n)

f(n)

表示方案數。怎麼轉移呀?

這裡有絕妙的一筆。分成兩種情況,今天是否有兔子到來,也就是 1

11 的數量是否為零。如果沒有 1

11 了,那剩下的必須用 (k+

1)

x(k+1)^x

(k+1)x

湊出,其中 x

>

0x>0

x>

0 。能不能轉化成子問題?我們將其全部除以 k+1

k+1k+

1 即可!就會使得 x

xx 減小 1

11 ,回到原來的範圍 x≥0

x\ge 0

x≥0 。

所以我們寫出方程式

f (n

)=f(

n−1)

+[nk

+1∈z

]f(n

k+1)

f(n)=f(n-1)+\left[\frac\in\z\right]f\left(\frac\right)

f(n)=f

(n−1

)+[k

+1n​

∈z]f

(k+1

n​)複雜度 o(n

+t

)\mathcal o(n+t)

o(n+t)

。可惜這是口胡的題,完全沒有題目和資料和標程呢。

思路**於其簡化版本,即 k=1

k=1k=

1 的情況。傳送門 to usoj。

隨便說說removeFromSuperview方法

專欄作者。之前寫過一篇關於removefromsuperview方法處理的文章,寫完後一直就沒怎麼更新這篇文章。這兩天回過頭來看看,感覺這篇文章有些地方寫的不夠嚴謹,而且還有一些自己理解錯的地方,所以打算重寫這篇文章。在使用removefromsuperview方法的時候,發現這個方法有很多我們沒有...

我來隨便說說

好久沒來兄弟連bbs了,隨便說說 正文 來兄弟連大約有895小時了,感觸也挺多.來之前 時不時地上網玩遊戲,而且生活也很不規律,根本都不敢想象以後會怎樣.可能買苦力.其實 我玩過之後有一種 罪惡感.一覺睡到12點也是常有的,感覺大學學不到什麼東西,一直想找個環境來鍛鍊自己,現在我想我找到了.起初來的...

專案上線之隨便說說

公司實施的siebel系統上線準備階段,加班加到一塌糊塗.基本每天都在10點半才離開公司,打車回家.畢業六七年,這還是頭一回.不過,也是難得的經歷,尤其對我這種在甲方做系統維護的人來說,專案實施經驗是珍貴的經歷.角色是siebel系統與sap系統的整合 學徒,跟著顧問混.也算是稍有心得.專案結束後好...