关闭

斜率大法题库

918人阅读 评论(5) 收藏 举报
分类:

[bzoj3675][Apio2014]序列分割

题目大意及模型转换

给定一个由N个元素组成的序列,你现在要对其做M次操作。每次操作如下:
1、选择一个长度大于1的序列,找到任意一个合法位置,将其分割成两个长度不为0的序列。
如[3,2,5,7,8]可以在2后面进行分割变为[3,2]和[5,7,8]。
2、如此做可以获得分数为两个分割后的序列元素之和相乘。
请使总分数最大。
每个元素都为正数,n<=100000,k<=min(n-1,200)。

DP做法

我们应该意识到切的先后顺序是没有用的。
设f[i,k]表示前i个元素被分割了k次,获得的最大总分。
设sum[i]表示1到i元素的前缀和。
显然f[i,k]=max(f[j,k1]+sum[j](sum[i]sum[j]))
这个DP可以在O(N2M)

斜率大法好

我们可以固定一个k,然后看看是否可以进行斜率优化。
固定k后我们固定一个i,然后比较决策j优于决策l的条件。

f[j,k1]+sum[j]sum[i]sum[j]2>f[l,k1]+sum[l]sum[i]sum[l]2
f[j,k1]f[l,k1]+sum[l]2sum[j]2>sum[i](sum[l]sum[j])
f[j,k1]f[l,k1]+sum[l]2sum[j]2sum[l]sum[j]>sum[i]

那么我们左边与i无关。
每个元素都是正数,右边的sum[i]会递增。
为了保证sum[l]-sum[j]>0,因此要保证j<l。
我们开单调队列。
那么新加入的放队尾,最优的取队头。
对于固定的k。
g(j,l)=f[j,k1]f[l,k1]+sum[l]2sum[j]2sum[l]sum[j]
那么单调队列内需保证相邻三元素,前两个的g值小于后两个的g值。
复杂度O(NM)

[火影完结纪念赛]木叶的军师

题目大意及模型转换

给定N个正整数,要求分成M组。每组带来的价值为这组的最大值与最小值差的平方。请使总价值最小。n<=10000,m<=5000。

DP做法

可以贪心的得知,排个序以后,连续的分成一组一定最优。
设f[i,k]表示前i个数分成k组最小总价值。
f[i,k]=min(f[j,k1]+(a[i]a[j+1])2)

斜率大法好

同第一题,固定k与i,那么j和l哪个优呢?
设j优于l,需满足:
f[j,k1]+(a[i]a[j+1])2<f[l,k1]+(a[i]a[l+1])2

f[j,k1]f[l,k1]+a[j+1]2a[l+1]2<2a[i](a[j+1]a[l+1])

f[j,k1]f[l,k1]+a[j+1]2a[l+1]2a[j+1]a[l+1]>2a[i]

注意为什么变号。
因为我们要j<l。排序后a[j+1]-a[l+1]<=0。
对于等于0的情况,我们进行合并(容易得知合并后不会造成什么影响,因为相同的一定分在同一组)。
那么小于0,两端相除一个负数,自然要进行变号。

待补充

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

实验吧CTF刷题记录(web篇)

1.这个看起来有点简单 解题链接: http://ctf5.shiyanbar.com/8/index.php?id=1 手工检测是否存在sql注入 使用sqlmap爆出当前数据库my_db 发现可能藏有key值的thiskey表 进一步爆出字段k0y并得到key值。 2.程序员的...
  • sinat_21923549
  • sinat_21923549
  • 2017-03-10 10:55
  • 2603

斜率优化总结&基础题表

斜率优化
  • u010336344
  • u010336344
  • 2016-09-28 21:42
  • 2018

OpenCV中的onMouse事件、ROI区域设置、直线斜率检测

//crop:probe1.bmp source:canny_probe.jpg #include "stdafx.h" #include "cv.h" #include "cxcore.h" #include "...
  • gududeyhc
  • gududeyhc
  • 2013-05-23 22:19
  • 1784

漫步微积分三——如何计算切线的斜率

各种想法都有自己的一席之地,但是时间会剔除许多细节。P=(x0,y0)P=(x0,y0)是抛物线y=x2y=x^2上的任意一个定点,如图1所示。作为基本思想的第一个图例,给定抛物线上一点PP,计算切线的斜率。首先,我们选择曲线上的一个临近点Q=(x1,y1)Q=(x1,y1)。接下来,我们画出由这两...
  • u010182633
  • u010182633
  • 2016-07-15 15:58
  • 2234

51NOD 1100 斜率最大

传送门平面上有N个点,任意2个点确定一条直线,求出所有这些直线中,斜率最大的那条直线所通过的两个点。 (点的编号为1-N,如果有多条直线斜率相等,则输出所有结果,按照点的X轴坐标排序,正序输出。数据中所有点的X轴坐标均不相等) Input 第1行,一个数N,N为点的数量。(2 <= N ...
  • qingshui23
  • qingshui23
  • 2016-07-06 20:37
  • 1488

斜率优化DP学习笔记

对于一类状态转移方程可以写成 f[i]=min/max(a[i]*b[j]+G[j])+H[i](a、H是只和i有关的函数,b、G是只和j有关的函数) 且a和b至少有一个是单调的动态规划问题,我们可以通过数形结合来优化它。这类问题一般是要把一个线性序列分成若干段,暴力解决时间复杂度一般是O(n^2)...
  • Tag_king
  • Tag_king
  • 2015-04-17 10:19
  • 1404

[模板] 斜率优化Dp详解

算法简介今天xinyue讲了斜率优化,全程懵逼,居然还有这么牛逼的东西。 于是与achen讨论了一下,总结一些东西。 斜率优化Dp其实是单调队列的推广,单调队列、旋转卡壳、斜率优化都利用了单调性降低时间复杂度。算法简介举个例子 有些动规状态转移方程可以写成 f[i]=min/max{f[j]...
  • Bill_Yang_2016
  • Bill_Yang_2016
  • 2017-01-22 19:29
  • 1184

斜率优化DP学习笔记

斜率优化DP学习笔记
  • Goseqh
  • Goseqh
  • 2017-03-01 20:05
  • 289

斜率优化dp学习笔记

一年前就看斜率优化dp了…然而一直没有看懂。今天花了一天时间总算了解了个大概。这篇文章将大致分析斜率优化dp的原理和应用。
  • OIljt12138
  • OIljt12138
  • 2017-03-26 22:13
  • 173

正则大法好,脏数据,呵呵。

先上个图: 恩,话说都写到一个单元格里了,前面是日期,后面括号里是数值型的,还有些带着单位,ok,lets do IT。 ①我们要先把括号统一成字符‘s’和‘e’,我这里建议大家用excel自带的替换功能,中文半角模式下的‘(’也可以被一起替换掉。 ②然后是套、吨、T、等单位清洗。 ...
  • Magicfrogman
  • Magicfrogman
  • 2016-05-20 00:03
  • 280
    个人资料
    • 访问:329952次
    • 积分:11659
    • 等级:
    • 排名:第1512名
    • 原创:814篇
    • 转载:4篇
    • 译文:0篇
    • 评论:205条
    最新评论
    文章分类