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

  应该是一个比较连贯的思维方式:去掉一个物品,那么我们转移的时候不考虑它就好了呗。考虑暴力:每一次都对剩余的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 ;
}

最新文章

  1. json对象数组按对象属性排序
  2. UIImage 在某些控件上被放大问题
  3. LightOj 1213 - Fantasy of a Summation(推公式 快速幂)
  4. Ajax相同url的请求,IE缓存问题
  5. paper 9:SVM番外篇:支持向量机系列六:Duality —— 关于 dual 问题推导的一些补充理论。
  6. Android存储数据方式
  7. easyui扩展-日期范围选择.
  8. haproxy之配置文件解析
  9. 开始编写寄几的 CSS 基础库
  10. 配置GitHub Push自动触发Jenkins的构建
  11. Java char
  12. 修改JEECG项目浏览器标题
  13. git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining
  14. [bug]WCF 内存入口检查失败 Memory gates checking failed
  15. GCD 实现生产-消费 模式
  16. elasticsearch6.4 memory locking requested for elasticsearch process but memory is not locked 终极解决
  17. linux UVC and hardware viewer
  18. MySQL双主如何解决主键冲突问题
  19. 开始iOS 7中自动布局教程(一)
  20. 基于javaWeb阶段下的Cookie和Session总结

热门文章

  1. Pro Git 学习笔记
  2. 解决url传递过程中加号变空格的问题
  3. springboot学习(2)
  4. hive 从Excel中导入数据
  5. python递归函数(计算阶乘)
  6. http一些常见知识记录
  7. POJ1426 Find The Multiple 解题报告
  8. [Hbase]hbase命令行基本操作
  9. sshd 防止暴力破解
  10. 用mapreduce读取hdfs数据到hbase上