单调队列
Hanks_o
一名。
展开
-
bzoj3048: [Usaco2013 Jan]Cow Lineup(单调队列)
题目传送门 啥话都不想说快排的判断写错了!!解法: 题目要求连续的一段最长(大概是这样) 其实就是要求原序列中最长的一段。使得里面的数不超过K+1种。 比如: K=2 也就是要删除两种数。 现在有个区间为555552 有一个区间为555521。 很显然上面那个更优。 但是我们要求在原序列里最长。 所以肯定会有一段为 555552?或者?555552 使得不超过三种数。然后就用原创 2017-10-18 08:38:05 · 361 阅读 · 0 评论 -
bzoj1044: [HAOI2008]木棍分割(二分+单调队列)
题目传送门 跑了3s那些200ms的是怎么跑出来的。。解法: 第一问蛮简单。以前大概做过这种类型的题。。 就二分一下最长的那一段的长度。 然后O(n)判断一下。第二问不简单。。 求方案诶。 我以前拿60分的时候打的是Dp。。 f[i][j]表示前i个分成j段切最长长度不大于第一问的答案的方案数。 那么继承就为f[k][j-1],k为上一段的结尾且满足k到i这一段木棍长度小于第一问的答原创 2017-10-12 08:21:03 · 423 阅读 · 0 评论 -
bzoj1010: [HNOI2008]玩具装箱toy(斜率优化)
题目传送门 斜率优化拖了好久都没学。。解法: %%% f[i]表示1~i的最小花费。 f[i]=min(f[j]+(sum[i]-sum[j]+i-(j+1)-L)^2) (j<i) f[i]=min(f[j]+(sum[i]+i-sum[j]-j-1-L)^2) (j<i) 令s[i]=sum[i]+i,L=1+L 则f[i]=min(f[j]+(s原创 2017-10-22 16:17:25 · 271 阅读 · 0 评论 -
bzoj1597: [Usaco2008 Mar]土地购买(斜率优化+Dp+单调队列)
题目传送门 真的舒服我终于第一次自己推出了斜率方程。。 真开心。解法: 其实这道题Dp还是挺好想的。 Dp方程大概就是f[j]+i到j所有的土地一组的花费。 其实看到斜率优化的题我一般都想怎么去搞单调性。。 排序。。 先按照长排序一遍。(升降随意,我从小到大排的) 对于每块土地i,j<i 那么i的长肯定大于等于j的长(排了序) 如果i的宽也大于等于j的宽的话,j就没用了。。 因原创 2017-10-25 20:31:18 · 356 阅读 · 0 评论 -
bzoj1911: [Apio2010]特别行动队(斜率优化+Dp)
题目传送门 好开心又独立做了一道斜率优化原来斜率优化也不是辣么难嘛。。解法: 这道题Dp方程还是蛮好想的。 s[i]表示1到i的和。 f[i]=min(f[i],f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c)斜率优化。。 设j>k且j对于i更优。 f[j]+a*(s[i]-s[j])^2+b*(s[i]-s[j])+c<f[k]+a*(s[i]-s[k])^2原创 2017-10-26 15:48:33 · 288 阅读 · 0 评论 -
bzoj1047: [HAOI2007]理想的正方形(单调队列)
题目传送门 水一发。 解法: 分最大值和最小值咯。 然后hang[i][j]表示第i行以j结尾往前数n个的最大值或最小值。 做完行之后做列。 lie[i][j]表示以(i,j)为右下角的n*n的矩阵的最大值或最小值。 跑两次单调队列就行了呀。。 代码实现: #include #include #include #include #include using namespace s原创 2018-02-01 11:17:36 · 286 阅读 · 0 评论