bzoj3163 [Heoi2013]Eden的新背包问题
2018-03-06 20:35
225 查看
Description
“寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听。”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌。 记忆中,她总是喜欢给Eden出谜题:在 valentine’s day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值、价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择买哪些玩偶以及每个玩偶买多少个,才能使得选择的玩偶总价钱不超过m,且价值和最大。众所周知的,这是一个很经典的多重背包问题,Eden很快解决了,不过她似乎因为自己的问题被飞快解决感到了一丝不高兴,于是她希望把问题加难:多次 询问,每次询问都将给出新的总价钱,并且会去掉某个玩偶(即这个玩偶不能被选择),再问此时的多重背包的答案(即前一段所叙述的问题)。
这下Eden 犯难了,不过Eden不希望自己被难住,你能帮帮他么?
(注意玩偶从0开始编号)
数据满足1 ≤ n ≤ 1000, 1 ≤ q ≤ 3*105 , 1 ≤ ai、bi、c i ≤ 100, 0 ≤ d i < n, 0 ≤ei ≤ 1000。
Solution
感觉做这么多题有点傻了除去询问不考虑就是裸的多重背包,单调队列或者二进制优化都行
由于物品只去掉了一个,那么做一次前缀dp,再做一次后缀dp,枚举分配的容量找最优值就好了
Code
#include <stdio.h> #include <string.h> #include <algorithm> #define rep(i,st,ed) for (int i=st;i<=ed;++i) #define drp(i,st,ed) for (int i=st;i>=ed;--i) const int N=1005; const int M=2005; int a[N*12],b[N*12],f[N*12][M],g[N*12][M]; int st ,ed ; int n,tot; int main(void) { scanf("%d",&n); rep(i,1,n) { int x,y,z; scanf("%d%d%d",&x,&y,&z); st[i]=tot+1; for (int j=1;j<=z;j*=2) { a[++tot]=x*j; b[tot]=y*j; z-=j; } if (z) { a[++tot]=x*z; b[tot]=y*z; } ed[i]=tot; } rep(i,1,tot) { drp(j,M-1,0) { f[i][j]=std:: max(f[i][j],f[i-1][j]); if (j>=a[i]) f[i][j]=std:: max(f[i][j],f[i-1][j-a[i]]+b[i]); } } drp(i,tot,1) { drp(j,M-1,0) { g[i][j]=std:: max(g[i][j],g[i+1][j]); if (j>=a[i]) g[i][j]=std:: max(g[i][j],g[i+1][j-a[i]]+b[i]); } } int T; scanf("%d",&T); while (T--) { int x,y; scanf("%d%d",&x,&y); x++; int ans=0; rep(i,0,y) { ans=std:: max(ans,f[st[x]-1][i]+g[ed[x]+1][y-i]); } printf("%d\n", ans); } return 0; }
相关文章推荐
- bzoj 3163: [Heoi2013]Eden的新背包问题 多重背包
- 【BZOJ】【3163】【HEOI2013】Eden的新背包问题
- BZOJ 3163 Heoi2013 Eden的新背包问题 多重背包
- 【bzoj3163】【Heoi2013】【Eden的新背包问题】【多重背包】
- BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
- BZOJ3163 [Heoi2013]Eden的新背包问题
- bzoj3163[Heoi2013]Eden的新背包问题
- bzoj3163: [Heoi2013]Eden的新背包问题
- 【bzoj3163】 HEOI2013Eden的新背包问题 多重背包
- BZOJ 3163: [Heoi2013]Eden的新背包问题
- 3163: [Heoi2013]Eden的新背包问题 多重背包
- 3163: [Heoi2013]Eden的新背包问题
- BZOJ3163&Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]
- BZOJ 3163 Eden的新背包问题
- BZOJ3163: [Heoi2013]Eden的新背包问题
- BZOJ 3164: [Heoi2013]Eden的博弈问题
- 【BZOJ】【3164】【HEOI2013】Eden的博弈问题
- BZOJ3163: [Heoi2013]Eden的新背包问题
- BZOJ3164: [Heoi2013]Eden的博弈问题
- 3223. HEOI2013 Ede的新背包问题