这题真的神奇了……蜜汁复杂度(`・ω・´)

  应该是一个比较连贯的思维方式:去掉一个物品,那么我们转移的时候不考虑它就好了呗。考虑暴力:每一次都对剩余的n - 1个物品进行多重背包转移,获得答案。既然可以优化,就说明一定有重复计算的地方——画出一张方格图,把不需要的格子涂掉——我们突然发现每一个可以有两部分组成,而两部分可以递推得到!那就很简单了:A[i][]表示选择n ~ i 这些物品能获得的最大值,B[i][]表示选择1~i的物品所能获得的最大值。

  答案就是两部分的AB数组暴力合并即可。

#include<bits/stdc++.h>
using namespace std;
#define maxn 1500
#define maxq 300015
int n, q, W[maxn], V[maxn], w[maxn * ], v[maxn * ], T[maxn];
int cnt, L[maxn], R[maxn], A[maxn][maxn], B[maxn][maxn];
int M; struct que
{
int num, id, m;
}Q[maxq]; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void Get_A()
{
for(int i = n; i >= ; i --)
{
int s = T[i], t = ;
L[i] = cnt + ;
while(s >= t)
{
w[++ cnt] = W[i] * t;
v[cnt] = V[i] * t;
s -= t, t *= ;
}
if(s)
{
w[++ cnt] = W[i] * s;
v[cnt] = V[i] * s;
s -= t, t *= ;
}
R[i] = cnt;
memcpy(A[i], A[i + ], sizeof(A[i + ]));
for(int j = L[i]; j <= R[i]; j ++)
for(int k = M; k >= w[j]; k --)
A[i][k] = max(A[i][k], A[i][k - w[j]] + v[j]);
}
} void Get_B()
{
for(int i = ; i < n; i ++)
{
memcpy(B[i], B[i - ], sizeof(B[i - ]));
for(int j = L[i]; j <= R[i]; j ++)
for(int k = M; k >= w[j]; k --)
B[i][k] = max(B[i][k], B[i][k - w[j]] + v[j]);
}
} int main()
{
n = read();
for(int i = ; i <= n; i ++)
W[i] = read(), V[i] = read(), T[i] = read();
q = read();
for(int i = ; i <= q; i ++)
{
Q[i].num = read() + , Q[i].m = read();
Q[i].id = i;
M = max(Q[i].m, M);
}
Get_A();
Get_B();
for(int i = ; i <= q; i ++)
{
int k1 = Q[i].num + , k2 = Q[i].num - ;
int j = Q[i].m, ans = ;
for(int a1 = ; a1 <= j; a1 ++)
ans = max(ans, A[k1][a1] + B[k2][j - a1]);
printf("%d\n", ans);
}
return ;
}

【题解】HEOI2013Eden 的新背包问题的更多相关文章

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

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

  2. 【BZOJ】【3163】【HEOI2013】Eden的新背包问题

    多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~ ...

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

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

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

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

  5. JZOJ 3223. 【HBOI2013】Ede的新背包问题

    3223. [HBOI2013]Ede的新背包问题 (Standard IO) Time Limits: 2000 ms  Memory Limits: 262144 KB  Detailed Lim ...

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

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

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

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

  8. [题解](背包)luogu_P4095 eden的新背包问题

    有一点乱搞吧......对人对背包的理解有些考验,要想知道去掉某个点的值,可以选择对前缀求一次背包,后缀求一次背包,而且不省掉价钱那一维, 这样每个点就可以由前后组合成了,枚举一下价钱取max即可 直 ...

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

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

随机推荐

  1. Hive(2)-Hive的安装,使用Mysql替换derby,以及一丢丢基本的HQL

    一. Hive下载 1. Hive官网地址 http://hive.apache.org/ 2. 文档查看地址 https://cwiki.apache.org/confluence/display/ ...

  2. 使用C6748和C5509A对nRF24L01驱动进行数据传输

    1. 写在前面 今天下午做了一个C5509A和C6748两个DSP的数据传输,经由RF24L01设备传输,都是模拟SPI协议,对于两个DSP来说,无非是配GPIO引脚,写好时序和延时.C5509A的G ...

  3. python线程与进程小结

    传统方式是调用2个方法执行1个任务,方法按顺序依次执行 # -*- coding:utf-8 -*- import threading import time def run(n): print('t ...

  4. Logistic Regression学习笔记

    1.李航<统计学习方法>: 2.https://blog.csdn.net/laobai1015/article/details/78113214 3.http://www.cnblogs ...

  5. python学习之对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  6. Java线程:概念与使用

    Java线程大总结 原文章地址:一篇很老的专栏,但是现在看起来也感觉深受启发,知识点很多,很多线程特点我没有看,尴尬.但是还是整理了一下排版,转载一下. 操作系统中线程和进程的概念 在现代操作系统中, ...

  7. 1321. [ZJOI2012] 灾难

    1321. [ZJOI2012] 灾难 ★★☆   输入文件:catas.in   输出文件:catas.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 阿米巴是小强的 ...

  8. Hibernate-ORM:14.Hibernate中的命名查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编 ...

  9. django 解决cors问题

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat 登录注册 AFei0018-博客 穷则思变,差则思勤.Pyth ...

  10. 利尔达NB-IOT的PSM和eDRX低功耗模式笔记

    1. NB-IOT的技术优势,广覆盖,NB-IOT与GPRS和LTE相比较,最大链路预算提升了20dB,相当于提升了100倍,即使在地车车库.地下室.地下管道等普通无线网络信号难以到达的地方也容易覆盖 ...