LOJ6089 小Y的背包計數問題 背包
阿新 • • 發佈:2019-02-18
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的背包計數問題 背包