專題 有限揹包計數問題

2021-08-30 09:09:47 字數 640 閱讀 2110

問題描述:有乙個容量為n的揹包和n個物品,第i個物品有cnt[i]個,每個物品的大小為i。求將揹包剛好裝滿的方案數

定狀態:f[i][j]表示使用前i個物品占用的大小為j的方案數

狀態轉移:對於狀態f[i][j],可由以下狀態轉化而來:

就用前i-1個物品占用j大小,不使用當前的第i個物品,狀態為f[i-1][j]

使用第i個物品,即用若干個1~i的物品組成j-i,再加上乙個i物品,狀態為f[i][j-i]。然而以上狀態是不不全面的,因為f[i][j-i]狀態已經使用了cnt[i]個i,那麼沒有再多的i供我們使用,即無法轉移到f[i][j],因此我們減去在f[i][j-i]狀態已經使用了cnt[i]個i的情況,最終得到狀態為f[i][j-i]-f[i-1][j-i-i*i]

最終,f[i][j]=f[i-1][j]+f[i][j-i]-f[i-1][j-i-i*i],注意賦初值之後很容易寫出來正解

思考:將原題目第i個物品有cnt[i]個改為有i個,其餘條件不變。而n<=1e5。顯然無法用上述方法解決,因此考慮優化

最後將兩個區間的解合併,列舉第乙個區間的和,再列舉一下 後面那個區間 選幾個數,再乘法原理算一下即可。

1597 有限揹包計數問題

input 第一行乙個正整數n 1 n 10 5 output 乙個非負整數表示答案,你需要將答案對23333333取模 input示例 output示例 2 分類討論,1 1 到根號n,字首和優化 2 根號n到n,最多只能選根號n個,於是有 ff q j ff p j m 1 ff q j i f...

51nod1597 有限揹包計數問題

你有乙個大小為n的揹包,你有n種物品,第i種物品的大小為i,且有i個,求裝滿這個揹包的方案數有多少 兩種方案不同當且僅當存在至少乙個數i滿足第i種物品使用的數量不同 n 100000,答案模23333333,時限2.333s 這道題一看是一道多重揹包,但是範圍有點大啊。可以嘗試利用一下題目的條件,對...

51Nod1957 有限揹包計數問題

傳送門 另乙個傳送門 這題還挺有意思 先貼一波出題人的題解 啥你說你看不見?看來你還沒過啊,等著a了再看或者乖乖花點頭盾好了 然後是我的做法 思想都是一樣的,只是細節不一樣而已 令 b lceil sqrt rceil 把物品分 ge b 和 對於大小 beginf i j sum i f i 1 ...