BZOJ 2287 消失之物 揹包DP

2021-08-29 01:38:04 字數 824 閱讀 1096

本來在寫暴力,寫著寫著突然就想到了這種做法…

希望今年noi

pnoip

noip

的時候也能這樣…

先不考慮某個物品消失的情況,也就是樸素的01揹包:

rep(i,1,n) repd(j,m,v[i]) f[j]=add(f[j],f[j-v[i]]);
然後考慮第i

ii物品消失之後,對答案的影響就是多了沒消失之前的累加,我們把累加去掉即可:

rep(i,1,n)
總**:

#include #include #include #include #include #define ll long long

#define rep(i,x,y) for(ll i=(x);i<=(y);i++)

#define repl(i,x,y) for(ll i=(x);i<(y);i++)

#define repd(i,x,y) for(ll i=(x);i>=(y);i--)

using namespace std;

const ll n=2e3+5;

ll n,m,v[n],g[n],f[n]=;

inline ll read()

while(ch>='0'&&ch<='9')

return f?-x:x;

}inline ll sub(ll x,ll y)

inline ll add(ll x,ll y)

int main()

return 0;

}

BZOJ2287消失之物 揹包DP

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

BZOJ2287消失之物

dpdpdpdpdpdpdpdp 討厭dp 這道題看起來很難 實際上也很難 思路 我們要求拿走一件物品之後的方案數,那麼肯定會涉及到不拿走的情況,那麼不拿走的情況是什麼呢?用前i件物品拼成體積j的方案數,所以我們要先預處理一下這個初始陣列f i 也就是一件都不拿走的情況 之後呢?我們考慮如何轉移拿走...

BZOJ 2287 消失之物 線段樹分治 揹包

time limit 10 sec memory limit 128 mb submit 875 solved 499 submit status discuss ftiasch 有 n 個物品,體積分別是 w1 w2 wn 由於她的疏忽,第 i 個物品丟失了。要使用剩下的 n 1 物品裝滿容積為 ...