保护出题人(defend) 题目描述 输入 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离. 接下来n行每行两个空格隔开的正整数,第i + 1行为 a i和 x i,分别表示相比上一关 在僵尸队列排头增加血量为 a i点的僵尸,排头僵尸从距离房子 x i米处开始接近. 输出 一个数,n关植物攻击力的最小总和 ,保留到整数. 样例输入 5 2 3 3 1 1 10 8 4 8 2 3 样例输出 7 提示 来源 sdoi2013R2day2 solution 把ai前缀和起来 得到…
[BZOJ3203]保护出题人(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 在最优情况下,肯定是存在某只僵尸在到达重点的那一瞬间将其打死 我们现在知道了每只僵尸到达终点的时间,因为僵尸要依次打死. 所以我们假设血量的前缀和是\(s_i\) 那么我么必须在它到达的时间\(t_i\)之前打出总共不少于\(s_i\)的伤害. 而植物的攻击力是固定的,意味着时间-伤害的坐标系上是一条直线. 那么现在相当于在时间-伤害的坐标系上有若干个点,每次询问与\((0,0)\)构成斜率最大的那一个. 但是现在…
[BZOJ3203] [SDOI2013]保护出题人(二分+凸包) 题面 题面较长,略 分析 对于第i关,我们算出能够打死前k个个僵尸的最小能力值,再取最大值就可以得到\(y_i\). 前j-1个僵尸到门的距离为\(x_i+(i-j+1) \times d\),血量为\(sum[i]-sum[j]\),因此 \[y_i=max(\frac{sum_i-sum_j}{x_i+(i-j+1) \times d})= max(\frac{sum_i-sum_j}{x_i+i \times d-(j+1…
[BZOJ3203][Sdoi2013]保护出题人 Description Input 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + 1行为Ai和 Xi,分别表示相比上一关在僵尸队列排头增加血量为Ai 点的僵尸,排头僵尸从距离房子Xi米处开始接近. Output 一个数,n关植物攻击力的最小总和 ,保留到整数. Sample Input 5 2 3 3 1 1 10 8 4 8 2 3 Sample Output 7 HINT 第…
P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者,你需要保护出题人铭铭. 僵尸从唯一一条笔直道路接近,你们需要在铭铭的房门前放置植物攻击僵尸,避免僵尸碰到房子. 第一关,一只血量为\(a_1\)点的墦尸从距离房子\(x_1\)米处速接近,你们放置了攻击力为\(y_1\)点/秒的植物进行防御:第二关,…
题目 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者,你需要保护出题人铭铭. 僵尸从唯一一条笔直道路接近,你们需要在铭铭的房门前放置植物攻击僵尸,避免僵尸碰到房子. 第一关,一只血量为\(a_1\)点的墦尸从距离房子\(x_1\)米处速接近,你们放置了攻击力为\(y_1\)点/秒的植物进行防御:第二关,在上一关基础上,僵尸队列排头增加一只血量为\(a…
题面 ​出题人铭铭认为给SDOI2012 出题太可怕了,因为总要被骂,于是他又给SDOI2013 出题了. 参加SDOI2012 的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者,你需要保护出题人铭铭. 僵尸从唯一一条笔直道路接近,你们需要在铭铭的房门前放置植物攻击僵尸,避免僵尸碰到房子.第一关,一只血量为a1 点的僵尸从距离房子x1 米处匀速接近,你们放置了攻击力为y1 点/秒的植物进行防御:第二关,在上一关基础上,僵尸队列排头增加一只血量为a2点的僵尸,与后一只…
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(DP\),顾名思义就是利用斜率相关性质对 \(DP\) 进行优化. 斜率优化通常可以由两种方式来理解,需要灵活地运用数学上的数形结合,线性规划思想. 对于这样形式的 \(dp\) 方程:\(dp[i]=Min/Max(a[i]∗b[j]+c[j]+d[i])\),其中 \(b\) 严格单调递增. 该方…
惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.luogu.org/problemnew/show/P3299 题解: 先讲正常做法. 设\(S_i\)为\(i\)的前缀和,则显然第\(i\)次答案为\(\max^i_{j=1} \frac{S_i-S_{j-1}}{x_i+id-jd}\) 那么很显然就是要求从一个点\((x_i+id,S_i)\)…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出来的每一段的价值和最大. 对于某一段,价值的计算公式为 $V=ax^2+bx+c$,其中 $x$ 为当前段的数值和. 题解 这题是博主大蒟蒻的第一道斜率优化DP题…… C++:while (1) 懵逼++; Pascal:while (true) do inc(懵逼); 本题首先一看就是 DP 题.…
Description Input Output Sample Input - - Sample Output HINT Solution 斜率优化动态规划 首先易得出这样的一个朴素状态转移方程 f[i]=max{f[j]+cal(sum[i]-sum[j])} 其中j<i,且cal(x)=a*x*x+b*x+c 那么设转移方程中的式子为V 若i<j,且V(j)>V(i) 那么,f[j]-f[i]+a*sum[j]^2-a*sum[i]^2+b*(sum[i]-sum[j])>2*…
Description 农夫John准备扩大他的农场,他正在考虑N (1 <= N <= 50,000) 块长方形的土地. 每块土地的长宽满足(1 <= 宽 <= 1,000,000; 1 <= 长 <= 1,000,000). 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. 如果FJ买一块3x5的地和一块5x3的地,则他需要付5x5=25. FJ希望买下所有的土地,但是他发现分组来买这些…
题目大意 让你把一个数列分成k+1个部分,使分成乘积分成各个段乘积和最大. 分析 首先肯定是无法开下n \(\times\) n的数组,那么来一个小技巧:因为我们知道k的状态肯定是从k-1的状态转移过来的,而且只从k-1的状态转移过来,那么我们就记录一下k-1和k的状态. 然后我们再来动态规划: 状态肯定是:\(f[i]\)表示前i个数,分成j段(j枚举,滚动数组优化成n). 转移方程就是: \[f[i]=max(g[j]+sum[j]\times(sum[i]-sum[k]))\] 一开始看错…
Description 小H最近迷上了一个分割序列的游戏.在这个游戏里,小H需要将一个长度为N的非负整数序列分割成k+l个非空的子序列.为了得到k+l个子序列, 小H将重复进行七次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的 序列一一也就是一开始得到的整个序列): 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新 序列. 每次进行上述步骤之后,小H将会得到一定的分数.这个分数为两个新序 列中元素和的乘积.小H希望选择一种最佳的分割方案,使得k…
玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8218  Solved: 3233[Submit] Description P 教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维 容器中.P教授有编号为1...N的N件玩具,第i件玩具经过压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的. 同时如果一个一维…
第一次写斜率优化,发现其实也没啥难的,没打过就随便找了一份代码借(chao)鉴(xi)下,不要介意= = 题解实在是懒得写了,贴代码吧= = CODE: #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;#define maxn 1000010long long f[maxn],x[maxn],sum[maxn],sum1[max…
原文链接www.cnblogs.com/zhouzhendong/p/UOJ104.html 题解 首先证明一个结论:对于一种分割方案,分割的顺序不影响最终结果. 证明:对于树 a[x] 和 a[y] ,如果 x 与 y 之间有分割,那么它们对答案的贡献就是 a[x] * a[y] ,否则无贡献. 于是问题转化成 DP: 设 dp[i][j] 表示把前 j 个数分成 i 段的最大收益,那么: 设 $$s[k] = \sum_{i=1}^{k} a[i]$$ $$dp[i][j] = \max_{…
题目分析 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜.所以,一段路必须在同一天中走完. Pine希望每一天走的路长度尽可能相近,所以他希望每一天走的路的长度的方差尽可能小. 帮助Pine求出最小方差是多少. 分析 比较简单的斜率优化. \[f[i][j]=min(f[k][j-1]+m(sum[i]-sum[j])^3-s\times s_n(s_i-s_j))\…
题目描述 给你一个数列,让你将这个数列分成若干段,使其每一段的和的\(a \times sum^2 + b \times sum + c\)的总和最大. 分析 算是一道斜率优化的入门题. 首先肯定是考虑\(O(n^2)\)的暴力DP. 定义状态\(f[i]\)表示最后一段的结尾是\(i\)的最大答案. 那么枚举j,得到转移方程为\(f[i]=max(f[i],f[j]+a\times (sum[i]-sum[j])^2+b\times(sum[i]-sum[j])+c\) 注意这里的转移方程不是…
原文链接http://www.cnblogs.com/zhouzhendong/p/8724739.html 题目传送门 - BZOJ4409 题意 有一个N个点的环,相邻两个点距离是1.点顺时针标号为1..N.最初每一个点是空的.要求最终点i存在ri头牛.你有∑ri头牛.你可以选择最多k个点,然后把你的牛任意分配在这k个点里.之后,每一头牛可以选择不动,也可以顺时针走d格并呆在那里.这样,它要耗费d的能量.通过合理选择点.合理分配牛.合理安排牛的走动,使得消耗的总能量最小. $n\leq 10…
原文链接http://www.cnblogs.com/zhouzhendong/p/8697258.html 题目传送门 - BZOJ3675 题意 对于一个非负整数序列,小H需要重复k次以下的步骤: 1.选择一个长度超过1的序列 2.从任意位置将序列分割成两个非空的新序列. 每次,小H将会得到分数.分数为两个新序列中元素和的乘积.请选择一种最佳的分割方式,使得k轮之后,使总得分最大.输出总得分. $n\leq 10^5,k\leq min(n-1,200)$ 题解 真是一道不错的题目. 首先,…
原文链接http://www.cnblogs.com/zhouzhendong/p/8696410.html 题目传送门 - BZOJ1096 题意 给定两个序列$a,b,X$,现在划分$a$序列. 被划分出来的段$[j,i]$的花费为$a_i+\sum_{k=j+1}^{i}(X_i-X_k)b_k$. 一种划分方式的花费就是每一段的花费之和. 问最小花费. 序列长度$\leq 10^6$. 题解 这题是BZOJ3437的升级版(其实也没升多少……,不仅代码我是几乎原样复制到,连题解我几乎都是…
原文链接http://www.cnblogs.com/zhouzhendong/p/8696321.html 题目传送门 - BZOJ3437 题意 给定两个序列$a,b$,现在划分$a$序列. 被划分出来的段$[j,i]$的花费为$a_i+\sum_{k=j+1}^{i}(i-k)b_k$. 一种划分方式的花费就是每一段的花费之和. 问最小花费. 序列长度$\leq 10^6$. 题解 首先我们不难写出DP方程: $$dp_i=max\{dp_j+\sum_{k=j+1}^{i}(i-k)b_…
原文链接http://www.cnblogs.com/zhouzhendong/p/8688187.html 题目传送门 - BZOJ3156 题意 长为$n$的序列$A$划分,设某一段为$[i,j]$,则其花费为$A_j+\sum_{k=i}^{j}(j-k)$. 一种划分方式的花费就是他每一段的花费和. 最小化花费. $n\leq 10^6$ 题解 斜率优化裸题. 设$dp_i$表示序列前$i$项通过划分可以到的最小花费. 则 $$dp_i=min\{dp_j+a_i+\frac{(i-j)…
原文链接http://www.cnblogs.com/zhouzhendong/p/8687797.html 题目传送门 - BZOJ1010 题意 一个数列$C$,然后把这个数列划分成若干段. 对于数列$C$的某一段,是从$i$~$j$的,那么就会产生$(i-j+(\sum_{k=i}^j C_k)-L)^2$的花费. 一种划分方式的花费就是划分出来的每一段产生的花费和. 求所有不同的划分方式所产生的总花费中最小花费为多少. 序列长度$\leq 5\times 10^4$. 题解 看着好像斜率…
按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器. 考虑优化,显然是一个斜率优化式子,设j转移优于k,则f[j]+gj(di-dj-1)+rj>f[k]+gk(di-dk-1)+rk,移项得(f[j]-gjdj-gj+rj)-(f[k]-gkdk-gk+rk)>di(gk-gj).g没有单调性,于是cdq分治,按g排序建上凸壳即可. 注意比较斜率时…
bzoj1597懒得复制,戳我戳我 Solution: 线性DP打牌\(+\)斜率优化 定义状态:\(dp[i]\)到了位置\(i\)最少花费 首先我们要发现,如果有一个小方块能被其他的大方块包围,其实可以忽略这个小方块,因为我们可以把他们俩捆绑,小方块的边长不会对求值造成贡献 然后我们可以按照宽从大到小排序,长从小到大(剔除了那种包含的情况),保证单调性 我们就可以列出递推式子:\(dp[i]=min(dp[j-1]+y[j]*x[i])\) 注意是\(dp[j-1]\)(这里搞错了好久) 显…
设f[i]为在i放置守卫塔时1~i的最小花费.那么显然f[i]=min(f[j]+(i-j)*(i-j-1)/2)+a[i]. 显然这是个斜率优化入门题.将不与i.j同时相关的提出,得f[i]=min(f[j]+j*(j+1)/2-ij)+i*(i-1)/2+a[i]. 套路地,假设j>k且j转移优于k,则f[j]+j*(j+1)/2-ij<f[k]+k*(k+1)/2-ik,(f[j]+j*(j+1)/2-f[k]-k*(k+1)/2)/(j-k)<i. 维护下凸壳即可. #inclu…
题面 首先是愉快的推式子 $dp[i]=max(dp[i],\frac{sum[i]-sum[j-1]}{x[i]+(i-j)*d})(1<=j<=i<=n)$(考虑有一只僵尸正好走到门前被打死,这样最优) 然后发现这个玩意好像和平时的斜率优化不太一样,好像这个式子自己就是一个斜率,我们把它分成和$i$,$j$有关的两坨,这样清楚一点 $dp[i]=max(dp[i],\frac{(sum[i])-(sum[j-1])}{(x[i]+d*i)-(d*j)})$ 这样很清楚了,对于每个$i…
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有 的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具,第i件玩具 经过压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的.同时如果一个一维容器中有多个玩具,那么两件玩具之间要加 入一个单位长度的填充物,形式地说如果将第i件玩具到第j个玩具放到一个容器中,那么容器的长度将为 x=j-i+Sigma(Ck)…