Luogu P4095 [HEOI2013]Eden 的新背包问题 思维/动规

当时一直在想前缀和。。。多亏张队提醒。。。



从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉;再从n到1背一次,同样记住每种状态;

然后询问时相当于是max(前缀+后缀),当然前缀后缀中间去掉了一个应去掉的商品。

#include<cstdio>
#include<iostream>
#define R register int
using namespace std;
inline int g() {
    R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch==‘-‘?-1:fix;
    do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
}
int n,q;
int a[1010],b[1010],c[1010],f[1010][1010],h[1010][1010];
signed main() {
    n=g();
    for(R i=1;i<=n;++i) a[i]=g(),b[i]=g(),c[i]=g();
    for(R i=1;i<=n;++i) for(R j=1000;j>=0;--j) {
        f[i][j]=f[i-1][j];
        for(R k=1;k<=c[i];++k) if(j>=k*a[i]) f[i][j]=max(f[i][j],f[i-1][j-k*a[i]]+k*b[i]);
        else break;
    }
    for(R i=n;i>=1;--i) for(R j=1000;j>=0;--j) {
        h[i][j]=h[i+1][j];
        for(R k=1;k<=c[i];++k) if(j>=k*a[i]) h[i][j]=max(h[i][j],h[i+1][j-k*a[i]]+k*b[i]);
        else break;
    } q=g();
    for(R i=1;i<=q;++i) {
        R k=g(),w=g(); R ans=0;
        for(R i=0;i<=w;++i) ans=max(ans,f[k][w-i]+h[k+2][i]);
        printf("%d\n",ans);
    }
}


2019.04.25

原文地址:https://www.cnblogs.com/Jackpei/p/10765890.html

时间: 2024-11-05 11:48:53

Luogu P4095 [HEOI2013]Eden 的新背包问题 思维/动规的相关文章

Luogu P4095 [HEOI2013] Eden的新背包问题

题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d+1,e-i}\). 然后就是单调队列优化多重背包. 我们知道多重背包的转移\(f[i][j]=\max\limits_{k=0}^{min(c[i],\lfloor\frac j{w[i]}\rfloor)}(f[i-1][j-w[i]*k]+v[i]*k)\) 令\(s=\lfloor\frac

BZOJ3163&amp;Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]

3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 277[Submit][Status][Discuss] Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valent

bzoj3163: [Heoi2013]Eden的新背包问题

Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine’s day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择买哪些玩偶

[HEOI2013]Eden 的新背包问题

题目描述 " 寄 没 有 地 址 的 信 ,这 样 的 情 绪 有 种 距 离 ,你 放 着 谁 的 歌 曲 ,是 怎 样 的 心 情 . 能 不 能 说 给 我 听 ." 失忆的 Eden 总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给 Eden 出谜题:在 valentine's day 的夜晚,两人在闹市 中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden 这样的 一个问题:有 n 个玩偶,每个玩偶

BZOJ 3163 Heoi2013 Eden的新背包问题 多重背包

题目大意:多重背包,多次询问某个物品不能选择时以某个总价钱最多能获得多少价值 求问正解是啥QAQ 维护一个前缀多重背包和一个后缀多重背包 每次询问时 枚举前面选多少和后面选多少 暴力统计答案即可 时间复杂度O(n^2logn+nq) 这3E的复杂度居然只跑了600sQAQ 正解到底是啥QAQ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #defin

【BZOJ】【3163】【HEOI2013】Eden的新背包问题

多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~n号物品花了j块钱的最大价值(这里我将所有的物品编号都加了1,原因……因为我一开始没+1,WA了QAQ) 然后询问的时候$ans=max_{j=0}^{e}\{ans,g1[d-1][j]+g2[d+1][e-j]\}$ 因为编号是0~n-1,所以这里$d-1$这一项是会越界的!不知为什么在CH上过

0-1背包问题(动规基础,好吧虽然我现在在说大话,待续...)

(此位老兄的讲解深得我意,特来推荐:http://blog.csdn.net/insistgogo/article/details/8579597) 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. POINT: 1·每种物品仅有一件,可以选择放或不放. 2·子问题---将前i件物品放入容量为V的背包中.价值总和为f[i][V]; 若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵

DSY3163*Eden的新背包问题

Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine's day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择

BZOJ 3163 Eden的新背包问题

分治背包+单调队列优化. 但是为什么maxn要1w多?...不怎么懂. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<cstdlib> #define maxn 10050 #define maxs 1050 #define maxm 300500 using namespace s