luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
LINK:Eden 的新背包问题
就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值。
可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的。
发现过不了n==10的点。
仔细观察n==10的点 可以发现我们暴力枚举 某个物品不选之后的最大值即可。设状态f[i][j]表示第i个物品不选此时钱数为j的最大值。
求出这个复杂度是n^2m的 然后可以O(1)回答询问。
考虑正解 可以发现 对于01背包或者多重背包 去掉一个物品询问最大价值 动态直接去掉是不现实的。
考虑分治 分治到某个点上表示其他的都加入背包了 就当前点没有加入背包的最大值。
然后 对于分治的两边 暴力合并。可以发现这个合并是m^2的。
进一步的 可以发现 分治的复杂度极高 不如直接求出前后缀的背包和 然后进行合并。
怎么把合并的复杂度降下来是问题 类似于卷积不过这个是取max.
考虑每次询问 只询问w 而不是询问整个m 所以直接合并的复杂度为O(m).
复杂度为Qm。3e8 但是跑的飞快。
const int MAXN=1010;
int n,Q,m;
int f[MAXN][MAXN],g[MAXN][MAXN];
int q[MAXN],l,r;
struct wy{int w,c,v;}t[MAXN];
int main()
{
freopen("1.in","r",stdin);
get(n);m=1000;
rep(1,n,i)
{
int get(x),get(y),get(z);
t[i]=(wy){x,z,y};
}
rep(1,n,i)//前i个物品
{
for(int res=0;res<w(i);++res)
{
int ww=(m-res)/w(i);
l=r=1;q[1]=0;
f[i][res]=f[i-1][res];
rep(1,ww,j)
{
while(l<=r&&j-q[l]>c(i))++l;
int s=j*w(i)+res;
f[i][s]=max(f[i-1][s],f[i-1][q[l]*w(i)+res]+(j-q[l])*v(i));
while(l<=r&&f[i-1][s]>=f[i-1][q[r]*w(i)+res]+(j-q[r])*v(i))--r;
q[++r]=j;
}
}
}
fep(n,1,i)
{
for(int res=0;res<w(i);++res)
{
int ww=(m-res)/w(i);
l=r=1;q[1]=0;g[i][res]=g[i+1][res];
rep(1,ww,j)
{
while(l<=r&&j-q[l]>c(i))++l;
int s=j*w(i)+res;
g[i][s]=max(g[i+1][s],g[i+1][q[l]*w(i)+res]+(j-q[l])*v(i));
while(l<=r&&g[i+1][s]>=g[i+1][q[r]*w(i)+res]+(j-q[r])*v(i))--r;
q[++r]=j;
}
}
}
get(Q);
rep(1,Q,i)
{
int x,w;
get(x)+1;get(w);
int ans=0;
rep(0,w,j)ans=max(ans,f[x-1][j]+g[x+1][w-j]);
put(ans);
}
return 0;
}
luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并的更多相关文章
- 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 ...
- Luogu P4095 [HEOI2013]Eden 的新背包问题 思维/动规
当时一直在想前缀和...多亏张队提醒... 从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉:再从n到1背一次,同样记住每种状态: 然后询问时相当于是max(前缀+后缀),当然前缀后缀中间 ...
- P4095 [HEOI2013]Eden 的新背包问题
P4095 [HEOI2013]Eden 的新背包问题 题解 既然假定第 i 个物品不可以选,那么我们就设置两个数组 dpl[][] 正序选前i个物品,dpr[][] 倒序选前i个物品 ,价格不超过 ...
- 题解——洛谷P4095 [HEOI2013]Eden 的新背包问题(背包)
思路很妙的背包 用了一些前缀和的思想 去掉了一个物品,我们可以从前i-1个和后i+1个推出答案 奇妙的思路 #include <cstdio> #include <algorithm ...
- BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...
- BZOJ3163&Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]
3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 428 Solved: 277[Submit][ ...
- 洛谷P4095||bzoj3163 [HEOI2013]Eden 的新背包问题
https://www.luogu.org/problemnew/show/P4095 不太会.. 网上有神奇的做法: 第一种其实是暴力(复杂度3e8...)然而可以A.考虑多重背包,发现没有办法快速 ...
- bzoj 3163: [Heoi2013]Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
随机推荐
- 注册表写入自定义协议,网页打开exe
新建文件:Register.reg,写入代码: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\exe1] @="exe1 P ...
- 「疫期集训day10」玫瑰
不管我们在怎么抵抗,德国都已经败了----失守苏瓦松后绝望中的德国兵 (貌似今天的题记和内容毫无关系) 觉得以后还是不要抱怨考试失误了,感觉没啥大用 T1暴搜/状压(然俄一看题很像刚写过的二分答案,上 ...
- 状压DP之Bill的挑战
题目 P2167 [SDOI2009]Bill的挑战 Sheng bill不仅有惊人的心算能力,还可以轻松地完成各种统计.在昨天的比赛中,你凭借优秀的程序与他打成了平局,这导致Sheng bill极度 ...
- cmake的下载和安装
背景: 最近迷上了 vscode 编辑器, 快速便捷,而且插件丰富,使用起来很爽.既然这样,本身游戏也是用 mingw 加 cygwin 开发的, 可以配置一下,开搞. 实操: 1.登陆cmake官网 ...
- abp重构登录
a.Core层 Authorization.Users.UserStore.cs public class UserStore : AbpUserStore<Role, User> { p ...
- postman-4-响应内容
通过响应报文来检测接口的正确性:响应由正文,响应头和状态码组成 Pretty模式可以格式化JSON或XML响应报文,以便更容易查看.突出显示Pretry模式中的链接,点击它们, 可以通过链接URL在P ...
- 数据可视化之powerBI基础(十八)Power BI度量值的格式如何修改?这里有三种方式
https://zhuanlan.zhihu.com/p/99818030 在知识星球遇到的问题中,有不少朋友问如何修改数值型度量值的格式,比如,新建的度量值如何显示为百分比或者千分位等等,这篇文章 ...
- 【高性能Mysql 】读书笔记(三)
第5章 创建高性能的索引 本文为<高性能Mysql 第三版>第四章读书笔记,Mysql版本为5.5 索引基础 索引的重要性:找一本800面的书的某一段内容,没有目录也没有页码(页码也可类比 ...
- Python数据分析之全球人口数据
这篇文章用pandas对全球的人口数据做个简单分析.我收集全球各国1960-2019年人口数据,包含男女和不同年龄段,共6个文件. pop_total.csv: 各国每年总人口 pop_female. ...
- 使用SQL语句进行特定值排序
使用SQL语句进行查询时,对数据进行排序,排序要求为排序的一个字段中特定值为顶部呈现: select * from TableName order by case TableFieldName whe ...