题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1010

题意:

  有n条线段,长度分别为C[i]。

  你需要将所有的线段分成若干组,每组中线段的编号必须连续。

  然后每组中的线段接成一排,若线段的编号为i to j,则总长度X = j - i + ∑ C[i to j]。

  对于每一个组,花费为(X - L)^2,其中L为给定常量。

  问你最小总花费。

题解:

  表示状态:

    dp[i]表示已经将1 to i的线段分好组了,此时的最小总花费。

  找出答案:

    ans = dp[n]

  如何转移:

    设s[i] = ∑ C[1 to i], L = L + 1.

    dp[i] = min dp[j] + (s[i]-s[j]- L)^2  (0 <= j < i)

  边界条件:

    dp[0] = 0

  斜率优化:

    设j < k,且k的决策更优。

    则:dp[j] + (s[i]-s[j]- L)^2 > dp[k] + (s[i]-s[k]- L)^2

    整理得:(dp[k]+(s[k]+L)^2-dp[j]+(s[j]+L)^2) / (2*(s[k]-s[j])) < s[i]

    所以slope(i,j) = (dp[i]+(s[i]+L)^2-dp[j]+(s[j]+L)^2) / (2*(s[i]-s[j]))

    由于s[i]递增,所以单调队列维护下凸壳即可。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 50005 using namespace std; int n,L;
int q[MAX_N];
long long s[MAX_N];
long long dp[MAX_N]; inline double slope(int i,int j)
{
return (dp[i]+(s[i]+L)*(s[i]+L)-dp[j]-(s[j]+L)*(s[j]+L))/(2.0*(s[i]-s[j]));
} int main()
{
cin>>n>>L; L++;
for(int i=;i<=n;i++) cin>>s[i];
for(int i=;i<=n;i++) s[i]+=s[i-];
for(int i=;i<=n;i++) s[i]+=i;
int l=,r=;
for(int i=;i<=n;i++)
{
while(l<r && slope(q[l],q[l+])<=s[i]) l++;
dp[i]=dp[q[l]]+(s[i]-s[q[l]]-L)*(s[i]-s[q[l]]-L);
while(l<r && slope(q[r],i)<slope(q[r-],q[r])) r--;
q[++r]=i;
}
cout<<dp[n]<<endl;
}

最新文章

  1. Youth -Samuel Ullman
  2. 背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
  3. poj 2187 Beauty Contest(凸包求解多节点的之间的最大距离)
  4. 利用LruCache为GridView加载大量本地图片完整示例
  5. bootstrap入门-3.响应式原理
  6. Spring中使用Hibernate
  7. java_可变参数构造器 Bulder模式
  8. 【转载】怎么理解Condition
  9. $(#form&#160;:input)与$(#form&#160;input)的区别
  10. nyoj61 传纸条(一) dp
  11. zjoi网络
  12. pyspider煎蛋无聊图爬取
  13. Ubuntu Server 16.04 安装MySQL并设置远程访问
  14. Vue(十五)组件
  15. while循环和递归
  16. logstash retrying failed action with response code: 429
  17. jQuery-切换效果
  18. kivy __init__() got an unexpected keyword argument &#39;__no_builder&#39; Kivy
  19. java中元注解有四个
  20. PHP多进程编程之僵尸进程问题

热门文章

  1. gulp配置,实例演示
  2. [译]NeHe教程 - 创建一个OpenGL窗体
  3. 查看cup是32位还是64位
  4. 最小生成树——Prim(普利姆)算法
  5. js自己定义插件-选项卡
  6. MySQL查询优化程序
  7. 研究怎么运用xcode处理常见的调试问题
  8. app 之间发送文件 ios
  9. u-boot下载模式LCD显示图片修改方法(基于TQ2440)
  10. maven;tomcat配置