博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
省选模拟赛 礼
阅读量:5162 次
发布时间:2019-06-13

本文共 1463 字,大约阅读时间需要 4 分钟。

分析:解法好神啊......

   前50分可以通过背包dp加一些优化来得到.后面的数据因为询问太多,显然不能一个个处理.

   一个神奇的做法:分治.  预处理出对于每一个点i,不考虑它 的答案f[i]. 只需要将它左边和右边的元素插入到背包中即可. 为了达到这一目的. 在分治的时候加一个判断:如果l == r - 1,则返回.这样可以保证不插入l这个点. 那么l的答案也就出来了.

   插入背包可以用单调队列来优化.和单调队列优化多重背包差不多. 实现起来有点复杂,可以用vector来表示f数组.

   注意:使用vector一定要初始化!并不是像数组那样能直接访问.

 

#include 
#include
#include
#include
#include
using namespace std;const int maxn = 1010;int n,a[maxn],b[maxn],c[maxn],q[maxn],Q;typedef vector
vint;vint f[maxn];void modify(vint &v,int x){ vint temp(v); for (int i = 0; i < a[x]; i++) { int head = 0,tail = 0; for (int j = i; j < maxn; j += a[x]) { while (head < tail && temp[j] > temp[q[tail - 1]] + (j - q[tail - 1]) / a[x] * b[x]) tail--; q[tail++] = j; while (head < tail && (j - q[head]) / a[x] > c[x]) head++; v[j] = max(v[j],temp[q[head]] + (j - q[head]) / a[x] * b[x]); } }}void solve(int l,int r,const vint &d){ if (l + 1 == r) { f[l] = d; return; } int mid = (l + r) >> 1; vint dl(d),dr(d); for (int i = l; i < mid; i++) modify(dr,i); for (int i = mid; i < r; i++) modify(dl,i); solve(l,mid,dl); solve(mid,r,dr);}int main(){ scanf("%d",&n); for (int i = 0; i < n; i++) scanf("%d%d%d",&a[i],&b[i],&c[i]); solve(0,n,vint(maxn,0)); scanf("%d",&Q); while (Q--) { int x,y; scanf("%d%d",&x,&y); printf("%d\n",f[x][y]); } return 0;}

 

转载于:https://www.cnblogs.com/zbtrs/p/8708099.html

你可能感兴趣的文章
PHP-5.6.22安装
查看>>
zoom和transform:scale的区别
查看>>
POJ1741 经典树分治
查看>>
POJ 1678 I Love this Game!
查看>>
【Alpha 冲刺】 5/12
查看>>
git fetch和git pull的区别
查看>>
不挣扎了,MVC验证错误信息汇总是酱紫的
查看>>
用selenium启动IE时报错
查看>>
Spark笔记
查看>>
奇妙的算法之LCS妙解
查看>>
邻接矩阵c源码(构造邻接矩阵,深度优先遍历,广度优先遍历,最小生成树prim,kruskal算法)...
查看>>
ubuntu 如何进行文件、夹删除等操作
查看>>
JAVA多线程详解
查看>>
Jmeter(七)Mongodb的增删改查
查看>>
[JavaScript] Use `+` opertor to add one string and one number
查看>>
vue实例中中data属性三种写法
查看>>
uva1636 - Headshot(条件概率)
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
关于Mybatis 的 Mapped Statements collection does not contain value for 异常 解决方案
查看>>
第五十五天 how can I 坚持
查看>>