题解——洛谷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总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
随机推荐
- maven 核心概念
1). 项目构建过程中的各个环节 . 清理 . 编译 . 测试 . 报告 . 打包 . 安装 . 部署 2). 配置环境变量 . 配置 JDK 配置 JAVA_HOME + PATH maven 需要 ...
- 基于word2vec训练词向量(一)
转自:https://blog.csdn.net/fendouaini/article/details/79905328 1.回顾DNN训练词向量 上次说到了通过DNN模型训练词获得词向量,这次来讲解 ...
- web安全防范之SQL注入攻击、攻击原理和防范措施
SQL注入 攻击原理 在编写SQL语句时,如果直接将用户传入的数据作为参数使用字符串拼接的方式插入到SQL查询中,那么攻击者可以通过注入其他语句来执行攻击操作,这些攻击包括可以通过SQL语句做的任何事 ...
- Linux基础命令---文本编辑tee
tee 将标准输入的内容复制到指定的文件中,同时在标准输出中显示. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 ...
- vuejs-devtools浏览器调试chrome插件
vuejs-devtools浏览器调试chrome插件(360极速浏览器也可以安装,需要FQ)https://chrome.google.com/webstore/detail/vuejs-devto ...
- html div重叠问题,原因分析和处理
1.现象 <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" c ...
- mysql 2
mysql索引原理 初识索引 为什么要索引? 加速查询 读写比10:1左右 什么是索引? 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构. 索引是应 ...
- JXNU暑期选拔赛
最小的数 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submissi ...
- serving inference
1.确定要提供服务的inference的input,output,以及exporter的signature:(这里用classify的signature做例子,input为byte数组,output为 ...
- mysql03
查询的列不在同一表中必须使用连接内连接,外链接 -- 输出学生姓名以及对应的年级名称 内连接 select studentName,gradeName from student inner join ...