思路很妙的背包

用了一些前缀和的思想

去掉了一个物品,我们可以从前i-1个和后i+1个推出答案

奇妙的思路

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int f[][][]={},v[]={},w[],num[],n,q,V;
void zypack(int w,int v,int j,int wic){
if(wic==)
for(int i=V;i>=v;i--)
f[j][i][wic]=max(f[j][i-v][wic]+w,f[j][i][wic]);
else
for(int i=V;i>=v;i--)
f[j][i][wic]=max(f[j][i-v][wic]+w,f[j][i][wic]);
}
void wqpack(void){
for(int i=;i<=n;i++){
for(int j=;j<=V;++j)
f[i][j][]=f[i-][j][];
int rec=num[i];
int mid=;
while(mid<=num[i]){
zypack(w[i]*mid,v[i]*mid,i,);
num[i]-=mid;
mid*=;
}
zypack(w[i]*num[i],v[i]*num[i],i,);
num[i]=rec;
}
for(int i=n;i>=;i--){
for(int j=;j<=V;++j)
f[i][j][]=f[i+][j][];
int mid=;
int rec=num[i];
while(mid<=num[i]){
zypack(w[i]*mid,v[i]*mid,i,);
num[i]-=mid;
mid*=;
}
zypack(w[i]*num[i],v[i]*num[i],i,);
num[i]=rec;
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d %d %d",&v[i],&w[i],&num[i]);
}
V=;
scanf("%d",&q);
wqpack();
// for(int i=1;i<=10;i++)
// for(int j=1;j<=n;j++)
// printf("f[%d][%d][0]=%d f[%d][%d][1]=%d\n",j,i,f[j][i][0],j,i,f[j][i][1]); for(int i=;i<=q;i++){
int x,y;
scanf("%d %d",&x,&y);
int ans=;
for(int j=;j<=y;j++)
ans=max(ans,f[x][j][]+f[x+][y-j][]);
printf("%d\n",ans);
}
return ;
}

题解——洛谷P4095 [HEOI2013]Eden 的新背包问题(背包)的更多相关文章

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

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

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

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

  3. luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并

    LINK:Eden 的新背包问题 就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值. 可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的. 发现过不了n==10的点 ...

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

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

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

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

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

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

  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. 3163: [Heoi2013]Eden的新背包问题

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

随机推荐

  1. 【转】SQL Server 运行状况监控SQL语句

    SQL Server 运行状况监控SQL语句   Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (D ...

  2. codeforces 979A Pizza, Pizza, Pizza!!!

    题意: 对一个圆形的pizza,只能用直线来切它,求把它切为n+1份的形状和size都相同的最下次数. 思路: 形状和size都相同,那么只能是扇形,分奇偶讨论. n为0还得特判,切0刀,因为这个还被 ...

  3. web基础,用html元素制作web页面

    用div,form制作登录页面,尽可能做得漂亮. 练习使用下拉列表选择框,无序列表,有序列表,定义列表. 观察常用网页的HTML元素,在实际的应用场景中,用已学的标签模仿制作. <!DOCTYP ...

  4. Linux Firewall 开启与关闭 以及sudo 设置

    Linux 系统下,普通用户经常需要使用root 用户的权限,所以要经常切换到root用户,比较麻烦,因此可以给普通用户添加root 权限,需要在常规命令前面加上sudo 切换到root vi  /e ...

  5. AtCoder Beginner Contest 088 (ABC)

    A - Infinite Coins 题目链接:https://abc088.contest.atcoder.jp/tasks/abc088_a Time limit : 2sec / Memory ...

  6. TestNG 搭建测试框架 自动化测试

    框架层级及基本组件:    参考:https://www.cnblogs.com/jier888/p/8998724.html Java作为开发语言 Maven管理项目及Jar包 Testng作为测试 ...

  7. docker local registry server gave HTTP response to HTTPS client

    server gave HTTP response to HTTPS client报错是在insecure_registry中加入了http前缀,如果本地registry不是https的 就不要加任何 ...

  8. 隐藏域传值到后台controller

    开发背景:一个页面有一个下拉框和一个单选按钮,下拉框保存的是厂商信息,单选按钮保存的是产品信息.每次下拉框的内容被选中,把厂商编码保存到隐藏域 <input type="hidden& ...

  9. logstash 5.1.1 学习

    Logstash 5.1.1 安装配置 安装和配置 java 环境: [root@ ~]# tar xf jdk-8u71-linux-x64.tar.gz [root@ ~]# mv jdk1.8. ...

  10. P2698 [USACO12MAR]花盆Flowerpot(单调队列+二分)

    P2698 [USACO12MAR]花盆Flowerpot 一看标签........十分后悔 标签告诉你单调队列+二分了............ 每次二分花盆长度,蓝后开2个单调队列维护最大最小值 蓝 ...