本來在寫暴力,寫著寫著突然就想到了這種做法…
希望今年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 物品裝滿容積為 ...