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 的新背包问题 多重背包 背包的合并的更多相关文章

  1. LUOGU P4095 [HEOI2013]Eden 的新背包问题

    题目描述 " 寄 没 有 地 址 的 信 ,这 样 的 情 绪 有 种 距 离 ,你 放 着 谁 的 歌 曲 ,是 怎 样 的 心 情 . 能 不 能 说 给 我 听 ." 失忆的 ...

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

    题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d ...

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

    当时一直在想前缀和...多亏张队提醒... 从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉:再从n到1背一次,同样记住每种状态: 然后询问时相当于是max(前缀+后缀),当然前缀后缀中间 ...

  4. P4095 [HEOI2013]Eden 的新背包问题

    P4095 [HEOI2013]Eden 的新背包问题 题解 既然假定第 i 个物品不可以选,那么我们就设置两个数组 dpl[][] 正序选前i个物品,dpr[][] 倒序选前i个物品 ,价格不超过 ...

  5. 题解——洛谷P4095 [HEOI2013]Eden 的新背包问题(背包)

    思路很妙的背包 用了一些前缀和的思想 去掉了一个物品,我们可以从前i-1个和后i+1个推出答案 奇妙的思路 #include <cstdio> #include <algorithm ...

  6. BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )

    从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...

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

    3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 277[Submit][ ...

  8. 洛谷P4095||bzoj3163 [HEOI2013]Eden 的新背包问题

    https://www.luogu.org/problemnew/show/P4095 不太会.. 网上有神奇的做法: 第一种其实是暴力(复杂度3e8...)然而可以A.考虑多重背包,发现没有办法快速 ...

  9. bzoj 3163: [Heoi2013]Eden的新背包问题

    Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...

随机推荐

  1. 轻松让HTML5可以显示桌面通知Notification非常实用

    使用Notification的流程 1.检查浏览器是否支持Notification2.检查浏览器的通知权限3.如果权限不够则申请获取权限4.创建消息通知5.展示消息通知 Notification AP ...

  2. 一天学习一点之如何安装nodejs

    如果没有安装git,先使用命令apt-get install git,然后按以下步骤安装即可 Install the dependencies:sudo apt-get install g++ cur ...

  3. List集合-01.ArrayList

    1.ArrayList 1.1 实现了Access接口 实现标记接口Access有以下特点: 目的是允许通用算法提供良好的性能 当遍历方式不同,速度不同时,通常需要继承这个接口 1.2 ArrayLi ...

  4. Mysql 查找表中的多组前n大元素

    博客已搬家,更多内容查看https://liangyongrui.github.io/ Mysql 查找表中的多组前n大元素 如果时单组很简单,只需要排序后去前n个就行了,但是多组排序似乎就不是那么好 ...

  5. Java数组的定义与使用

    一.数组概念 可以将多个同一数据类型的数据,存储到同一个容器中 1. 格式 数据类型[] 数组名=new 数据类型[元素个数] "数据类型"表示该数组中可以存放哪一类型的数据 &q ...

  6. MySQL数据库06 /数据库总结

    MySQL数据库06 /数据库总结 目录 MySQL数据库06 /数据库总结 1. 数据库/DBMS 2. 数据库分类 3. 修改密码 4. 库操作 5. 表操作 6. 存储引擎 7. 事务 8. 约 ...

  7. Flask 基础组件(三):路由系统

    1. 常见路由 @app.route('/user/<username>') @app.route('/post/<int:post_id>') @app.route('/po ...

  8. 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。 一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:我年龄的立方是个4位数。 我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请你推算一下,他当时到底有多年轻。 结果只有一个数。

    #include<stdio.h>int main(){ int age=1; int san=0; int si=0; int sum=0; while(age>0) { san= ...

  9. 重装win7时遇到点小问题

         最近装系统的时候有个头疼的事,事情的起因是这样的,我在工作的时候用的win7,破解的时候各种工具都破解不了,说是有未分配的盘符.并且,当时装的是没更新的win7,工作上要用到ie11只能在w ...

  10. lua的table表去重

    推荐阅读:  我的CSDN  我的博客园  QQ群:704621321  我的个人博客 方法一 用过lua的人都知道,lua的table中不允许存在相同的key,利用这个思想,我们可以将原始table ...