1. 程式人生 > >LOJ6089 小Y的背包計數問題 背包

LOJ6089 小Y的背包計數問題 背包

sum problem 紮實 背包 解題報告 targe 思想 實現 block

正解:背包

解題報告:

先放傳送門!

好煩昂感覺真的欠下一堆,,,高級數據結構知識點什麽的都不會,基礎又麻油打紮實NOIp前的題單什麽的都還麻油刷完,,,就很難過,,,哭辣QAQ

不說辣看這題QwQ!

首先註意到當i>=√n時相當於是有無窮個的

可以想到對不同的物品數量進行分類討論

對於i<√n,就最普通的背包,f[i][j]:第i個物品已裝容量為j的方案數

轉移就是f[i][j]=∑f[i-1][j-k*i](0<=k<=i

那就按照i分剩余類,前綴和優化一下,因為i<=√n,所以復雜度是O(n√n

)

具體實現中午寫QAQ

然後對於i>=√n,就相當於是麻油個數限制了鴨,所以就相當於是跑個完全背包辣

然後問題就轉化成了整數劃分問題,要求出一個和為n,最小數>=√n的最長不下降序列(昂關於最長不下降這個是為了防重強制設定的嘛QwQ

那轉移就是,要麽直接在序列的最前面加上一個√n,要麽全部+=1

那就是設g[i][j]:分出了i個數,和為j的方案數

由上面得出的轉移可以列出轉移方程:g[i][j]=g[i][j-i]+g[i-1][j-√n]

然後把兩部分拼湊在一塊兒就乘法原理+加法原理,最基礎的小學奧數思想不說辣QAQ

具體代碼中午放趴QAQ

LOJ6089 小Y的背包計數問題 背包