消失之物(永遠擼不完的揹包)

2022-01-29 17:25:06 字數 917 閱讀 6323

消失之物(thing.pas/c/cpp)

【問題描述】

yd有 n 個物品, 體積分別是 w1, w2, ..., wn。 由於她的疏忽, 第 i 個物品丟失了。 「要使用剩下的 n - 1 物品裝滿容積為 x 的揹包,有幾種方法呢?」 -- 這是經典的問題了。他把答案記為 count(i, x) ,想要得到所有1 <= i <= n, 1 <= x <= m的 count(i, x) **。

【輸入格式】

第1行:兩個整數 n  和 m ,物品的數量和最大的容積。

第2行: n 個整數 w1, w2, ..., wn, 物品的體積。

【輸出格式】

乙個 n × m 的矩陣, count(i, x)的末位數字。

【樣例輸入】

3 21 1 2

【樣例輸出】

1111

21【資料規模】

10% n <= 20 m <= 100

50% n <= 500 m <= 500

80% n <= 1000 m <= 1000

100% n <= 2000 m <= 2000

題解:下面這是正常的式子:

f[i][j]=f[i-1][j]+f[i-1][j-w[i]](不放i個數+放i個數)

但是你一行一行這麼幹擼肯定tle,要有想法的擼(喪失……)

設g[i][j]就為結果那個矩陣,即g[i][j]表示除去i,剩下的填滿j容量揹包的方案數

則有g[i][j]=f[n][j]-g[i][j-w[i]]

這個式子就相當做第i行時於把上面f那個式子的後面的放的個數給減掉了……太巧妙了

本蒟殘首先想的是擼出第一行看看能不能遞推出後面,但是發現想多了……

後來蒟殘想沒行只做那乙個,也就是和題解思路差不多,但是蒟殘沒想到減……發現開個3維記下子好像可以但是要mle……所以掛了……

消失之物 揹包回退

題目鏈結 我們知道 01 揹包方案數的遞推式長這樣 f j f j w i 如果一件物品不選,就會少一次這樣的轉移貢獻。於是我們把這個貢獻還回去。g j g j w i 就做完了。include include include includeusing namespace std define n ...

BZOJ 2287 消失之物 揹包DP

本來在寫暴力,寫著寫著突然就想到了這種做法 希望今年noi pnoip noip 的時候也能這樣 先不考慮某個物品消失的情況,也就是樸素的01揹包 rep i,1,n repd j,m,v i f j add f j f j v i 然後考慮第i ii物品消失之後,對答案的影響就是多了沒消失之前的累...

BZOJ2287消失之物 揹包DP

退揹包問題。bzoj2287 許可權 time limit 10 sec memory limit 128 mb submit 939 solved 546 submit status discuss ftiasch 有 n 個物品,體積分別是 w1 w2 wn 由於她的疏忽,第 i 個物品丟失了。...