题解——洛谷P4095 [HEOI2013]Eden 的新背包问题(背包)
思路很妙的背包
用了一些前缀和的思想
去掉了一个物品,我们可以从前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 的新背包问题(背包)的更多相关文章
- P4095 [HEOI2013]Eden 的新背包问题
P4095 [HEOI2013]Eden 的新背包问题 题解 既然假定第 i 个物品不可以选,那么我们就设置两个数组 dpl[][] 正序选前i个物品,dpr[][] 倒序选前i个物品 ,价格不超过 ...
- BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...
- luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
LINK:Eden 的新背包问题 就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值. 可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的. 发现过不了n==10的点 ...
- LUOGU P4095 [HEOI2013]Eden 的新背包问题
题目描述 " 寄 没 有 地 址 的 信 ,这 样 的 情 绪 有 种 距 离 ,你 放 着 谁 的 歌 曲 ,是 怎 样 的 心 情 . 能 不 能 说 给 我 听 ." 失忆的 ...
- Luogu P4095 [HEOI2013]Eden 的新背包问题 思维/动规
当时一直在想前缀和...多亏张队提醒... 从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉:再从n到1背一次,同样记住每种状态: 然后询问时相当于是max(前缀+后缀),当然前缀后缀中间 ...
- Luogu P4095 [HEOI2013]Eden的新背包问题
题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d ...
- 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.考虑多重背包,发现没有办法快速 ...
- 3163: [Heoi2013]Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
随机推荐
- ubuntu之redis集群配置
redis3版本以上支持集群 需要ruby的支持 root@iZ2zejfbthvbzs5lxf37vjZ:/usr/local/src/redis-3.2.9/src# apt-get instal ...
- Introduction to debugging neural networks
http://russellsstewart.com/notes/0.html The following advice is targeted at beginners to neural netw ...
- request.getServletPath(),request.getContextPath()
2018-11-24 16:34:33 1. getServletPath():获取能够与“url-pattern”中匹配的路径,注意是完全匹配的部分,*的部分不包括. 2. getPageInfo ...
- JavaBean和List<JavaBean>
2018-11-04 23:04:03开始写 返回泛型为User是列表 public List<User> getUserInfo() { conn = getConn();//获取数据库 ...
- jQuery文档操作--append()、prepend()、after()和before()
append(content|fn) 概述 向每个匹配的元素内部追加内容,这个操作与对指定的元素执行appendChild方法,将它们添加到文档中的情况类似 参数 content 要追 ...
- UITableView 的坑
1.cell的view和contentView的区别 1.1 addSubView UITableViewCell实例上添加子视图,有两种方式:[cell addSubview:view]或[cell ...
- XML系列之--创建电文格式的XML(一)
关于XML,学校那会,老师在口中仅仅提及,自己也未曾深入接触过,仅是些将最基本XML文件内容显示在web定义的表格中之类的简单操作,如今项目中的收发电文涉及到复杂XML的操作.趁此契机好好回顾下XML ...
- Spark学习之路 (九)SparkCore的调优之数据倾斜调优
摘抄自:https://tech.meituan.com/spark-tuning-pro.html 数据倾斜调优 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Sp ...
- C++前置声明
[1]一般的前置函数声明 见过最多的前置函数声明,基本格式代码如下: #include <iostream> using namespace std; void fun(char ch, ...
- STL容器之list
[1]list简介 实质上,list容器就是一个双向链表,可以高效地进行插入.删除操作. [2]list链表常用方法 (1)构造.赋值.清空.删除.插入.判空等 应用示例代码如下: #include ...