dpdpdpdpdpdpdpdp
討厭dp
這道題看起來很難(實際上也很難)
思路:我們要求拿走一件物品之後的方案數,那麼肯定會涉及到不拿走的情況,那麼不拿走的情況是什麼呢?
用前i件物品拼成體積j的方案數,所以我們要先預處理一下這個初始陣列f[i],也就是一件都不拿走的情況
之後呢?我們考慮如何轉移拿走第j個物品,我們定義乙個dp[i][j]陣列,dp[i][j]表示拿走第i個物品,湊成j份體積的方案數
當j=0時,dp[i][0]=1
然後我們考慮j!=0時
若j若j>=a[i],這是a[i]對j可以是有影響的,那麼必定要轉移,怎麼轉移呢?我們發現用a[i]湊出j的方案數應該是和dp[i][j-a[i]]相同,因為在j-a[i]的基礎上每一種方案加a[i],對方案數無影響,用湊出j的總方案數減去用到a[i]的方案數就是不用a[i]的方案數所以dp[i][j]=f[j]-dp[i][j-a[i]] (j>=a[i])
**
//by acermo
#include#include#include#include#includeusing namespace std;
const int m=2500;
int n,m;
int c[m],f[m]=,dp[m][m];
int main()
puts("");
} return 0;
}
BZOJ2287 消失之物 分治 DP
time limit 10 sec memory limit 128 mb submit status discuss ftiasch 有 n 個物品,體積分別是 w1 w2 wn 由於她的疏忽,第 i 個物品丟失了.要使用剩下的 n 1 物品裝滿容積為 x 的揹包,有幾種方法呢?這是經典的問題了。...
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 個物品丟失了。...