状态表示:dp[i]表示打印前i个单词的最小成本;s[i]维护前缀和。

状态转移:dp[i]=min(dp[j]+(s[i]-s[j])2)+m , 0<=j<i。

换成y=kx+b的形式:dp[j]+s[j]2=2*s[i]*s[j]+dp[i]-s[i]2-m。

算法步骤:1.枚举i=1...n,k=2*s[i]。

2.检查单调队列队头,排除决策.。

3.此时队头就是最优决策j,根据方程计算dp[i]。

4.加入新决策i,检查下凸性,删除队尾直至满足下凸性。

5.最优解为dp[n]。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=5e5+10;
4 int dp[N],s[N],q[N];
5 int n,m;
6
7 int GetY(int k1,int k2){//求y得差值
8 return dp[k2]+s[k2]*s[k2]-(dp[k1]+s[k1]*s[k1]);
9 }
10
11 int GetX(int k1,int k2){//求x的差值
12 return s[k2]-s[k1];
13 }
14
15 int GetVal(int i,int j){//得到dp[i]的值
16 return dp[j]+(s[i]-s[j])*(s[i]-s[j])+m;
17 }
18
19 int main(){
20 while(~scanf("%d%d",&n,&m)){
21 s[0]=0;
22 dp[0]=0;
23 for(int i=1;i<=n;i++){
24 scanf("%d",&s[i]);
25 s[i]+=s[i-1];
26 }
27 int head=0,tail=0;
28 q[tail++]=0;//单调队列 ,该队列要维护斜率单增
29 for(int i=1;i<=n;i++){
30 while(head+1<tail && GetY(q[head],q[head+1])<=2*s[i]*GetX(q[head],q[head+1]))
31 head++;//排除之前的不是最优的决策
32 dp[i]=GetVal(i,q[head]);
33
34 while(head+1<tail && GetY(q[tail-1],i)*GetX(q[tail-2],q[tail-1])<=GetY(q[tail-2],q[tail-1])*GetX(q[tail-1],i))
35 tail--;//维护下凸包,不满足则删去
36 q[tail++]=i;
37 }
38 printf("%d\n",dp[n]);
39 }
40 return 0;
41 }

最新文章

  1. Create a geoprocessing tool to buffer a layer and retrieve messages____sync
  2. Redis内存数据库在Exchange会议室的应用
  3. Pebbles
  4. 利用 NUget包 EPPlus 实现数据导出到Excel(适用于MVC)
  5. 251. Flatten 2D Vector
  6. VC++ SetLayeredWindowAttributes 部分窗口透明鼠标穿透
  7. 获取元素最终的background-color
  8. 给Integer对象加锁的错误方式
  9. Centos系统中彻底删除Mysql数据库
  10. Java示例:如何执行进程并读取输出
  11. (error) MOVED 5798 172.17.0.3:6379
  12. c++复习:STL之容器
  13. Prism-超轻量的开源框架
  14. spring MVC、mybatis配置读写分离,ReplicationDriver(转载)
  15. 003-spring cloud gateway-概述、Route模型、网关初始化配置过程、基本原理
  16. WeifenLuo.WinFormsUI.Docking.dll的用法
  17. Linux-- 查看文件 more与其它
  18. 一款基于uploadify扩展的多文件上传插件,完全适用于Html5
  19. Educational Codeforces Round 58 (Rated for Div. 2)
  20. IE6&amp;IE7 bug

热门文章

  1. 为你的网站加上live2d的动态小挂件,博君一晒
  2. 基于 Next.js实现在线Excel
  3. linux-0.11分析:init文件 main.c的第二个初始化函数trap_init() 第五篇随笔
  4. Luogu2986 [USACO10MAR]伟大的奶牛聚集 (树形DP)
  5. java学习第三天常用类.day12
  6. 在 WXML 中直接使用 JS 代码
  7. ss 显示unix 域 的socket 缓冲区不正确
  8. centos7.6内核之cfs_bandwidth下的distribute_cfs_runtime hard lockup
  9. ADO.NET数据库开发
  10. Mac设置外网访问本地项目