题目:

题目在这里

思路与做法:

这题不难想。

首先我们先推出一个普通的dp方程:

\(f_i = min \{ f_j+(i-j-1+sum_i-sum_j-L)^2\}\)

然后就推一推式子了:

我们来比较计算f[i]时的j和k两个决策

\(f_j+(i-j-1+sum_i-sum_j-L)^2 < f_k+(i-k-1+sum_i-sum_k-L)^2\)

令\(num_i = i+sum_i\)

令\(C = L+1\)

\(f_j+(num_i-num_j-L-1)^2 < f_k+(num_i-num_j-L-1)^2\)

\(f_j+{num_i}^2-2*num_i*(num_j+C)+(num_j+C)^2\)

\(<f_k+{num_i}^2-2*num_i*(num_k+C)+(num_k+C)^2\)

$f_j+(num_j+C)2-f_k-(num_k+C)2 < $

\(2*num_i*(num_j-num_k)\)

\({f_j+(num_j+C)^2-f_k-(num_k+C)^2 \over 2*(num_j-num_k)} < num_i\)

接下来就可以用斜率优化dp了。

代码:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring> using namespace std; const int N = 50010; inline long long sqr(long long x) { return x*x; } long long a[N]; long long sum[N]; long long num[N], C; long long f[N];
double calc(int j, int k) { return (double)(f[j]+sqr(num[j]+C)-f[k]-sqr(num[k]+C))/(double)(2*(num[j]-num[k])); }
int Q[N], hd, tl; int main()
{ int n;
long long m;
scanf("%d%lld", &n, &m);
for(int i=1; i<=n; i++)
{ scanf("%lld", &a[i]);
sum[i] = sum[i-1]+a[i];
}
for(int i=1; i<=n; i++) num[i] = sum[i]+i;
C = m+1;
Q[hd = 0] = 0;
tl = 1;
for(int i=1; i<=n; i++)
{ while(hd < tl-1 && calc(Q[hd+1], Q[hd]) <= num[i]) hd++;
f[i] = f[Q[hd]] + sqr(num[i]-num[Q[hd]]-C);
while(hd < tl-1 && calc(i, Q[tl-1]) <= calc(Q[tl-1], Q[tl-2])) tl--;
Q[tl++] = i;
}
printf("%lld\n", f[n]);
return 0;
}

最新文章

  1. 【powerdesigner】将pdm或者cdm保存为普通图片格式
  2. 传智播客--ADO.net--SqlBulkCopy批量插入数据(小白必知)
  3. Qt qml 单例模式
  4. java中开源日志记录工具log4j
  5. .NET牛人应该知道些什么
  6. C#的linq在winform中简单应用
  7. Windows下elasticsearch插入数据报错!
  8. jquery属性选择器(匹配具有指定属性的元素)
  9. ubuntu 安装bochs
  10. Java_你应该知道的26种设计模式
  11. C#的委托 Action&lt;&gt;和Func&lt;&gt;
  12. JAVA 流式布局管理器
  13. Smarty中一些标签的使用
  14. hdu 1540 Tunnel Warfare (区间线段树(模板))
  15. C# 重写思想
  16. pch文件的作用和配置
  17. 办理卡尔加里大学(本科)学历认证『微信171922772』calgary学位证成绩单使馆认证University of calgary
  18. iOS制作毛玻璃效果
  19. scala读取解析json文件
  20. centos7 安装 redis-4.0.9

热门文章

  1. spring data jpa 、hibernate、jpa之间的关系
  2. 【SQL】结构化查询语言
  3. I2C controller core之Bit controller(05)
  4. AI.框架理论.语义网.语言间距.孤单
  5. python 生成测试报告并发送邮件
  6. iframe的2个问题
  7. js-构造数组
  8. 子元素设置margin-top作用到了父元素
  9. 15.3 Task 异常
  10. 当样式中存在!important时无法使用show()或hide() 2017-06-11 22:25 15人阅读 评论(0) 收藏