BZOJ_3675_[Apio2014]序列分割_斜率优化 Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开始得到的整个序列): 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列. 每次进行上述步骤之后,小H将会得到一定的分数.这个分数为两个新序列中元…
WA了一版... 切点确定的话, 顺序是不会影响结果的..所以可以dp dp(i, k) = max(dp(j, k-1) + (sumn - sumi) * (sumi - sumj)) 然后斜率优化就可以了... -------------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstr…
3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 4021  Solved: 1569[Submit][Status][Discuss] Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列——也就是一开…
P3648 [APIO2014]序列分割 我们先证明,分块的顺序对结果没有影响. 我们有一个长度为3的序列$abc$ 现在我们将$a,b,c$分开来 随意枚举一种分块方法,如$(ab)(c)$,$(a)(b)(c)$ 答案为$(a+b)*c+a*b=ac+bc+ab$ 多枚举几种,我们发现答案总是不变的. 所以我们可以默认每次从左到右扫,用dp求解 对于每个$1$到$k$,我们都把序列扫一遍 设$f[k][i]$为对前$i$个数进行$k$次切割的最大价值, $s[i]$为元素前缀和,那么 $f[…
3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 3366  Solved: 1355 [Submit][Status][Discuss] Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列--也就是…
原文链接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)$ 题解 真是一道不错的题目. 首先,…
点此看题面 大致题意: 你可以对一个序列进行\(k\)次分割,每次得分为两个块元素和的乘积,求总得分的最大值. 区间\(DPor\)斜率优化\(DP\) 这题目第一眼看上去感觉很明显是区间\(DP\). 但是,一看数据范围,\(n\le100000\),这是要上天的节奏! 不过,再看\(m\le200\),比较显然应该是\(O(nm)\)的时间复杂度. 实际上,这题的确是可以用斜率优化\(DP\)来做到\(O(nm)\)的. 推性质 首先,我们要知道一个性质:将一个区间进行若干次分割,分割的顺序…
传送门 斜率优化dp经典题目. 首先需要证明只要选择的K个断点是相同的,那么得到的答案也是相同的. 根据分治的思想,我们只需要证明有两个断点时成立,就能推出K个断点时成立. 我们设两个断点分成的三段连续序列的和为a,b,ca,b,ca,b,c 如果先分左边有:total=a∗(b+c)+b∗c=a∗b+b∗c+c∗atotal=a*(b+c)+b*c=a*b+b*c+c*atotal=a∗(b+c)+b∗c=a∗b+b∗c+c∗a 如果先分右边有:total=(a+b)∗c+a∗b=a∗b+b∗…
Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列--也就是一开始得到的整个序列): 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列. 每次进行上述步骤之后,小H将会得到一定的分数.这个分数为两个新序列中元素和的乘积.小H希望选择一种最佳的分割方式,使得k轮之后,小…
传送门 没想到这种多个状态转移的还能用上斜率优化……学到了…… 首先我们可以发现,切的顺序对最终答案是没有影响的 比方说有一个序列$abc$,每一个字母都代表几个数字,那么先切$ab$再切$bc$,得分是$ab+bc+ac$,而如果先切$bc$再切$ab$,得分也是$ab+bc+ac$,不难看出得分是一样的 那么我们可以考虑一下转移方程$$dp[a][i]=max\{dp[a-1][j]+sum[j]*(sum[i]-sum[j])\}$$ 其中$a$表示切几刀,$sum$表示前缀和 然后发现空…