Description

最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线。 新的电话线架设在已有的N(2 <= N <= 100,000)根电话线杆上, 第i根电话线杆的高度为height_i米(1 <= height_i <= 100)。 电话线总是从一根电话线杆的顶端被引到相邻的那根的顶端 如果这两根电话线杆的高度不同,那么FJ就必须为此支付 C*电话线杆高度差(1 <= C <= 100)的费用。当然,你不能移动电话线杆, 只能按原有的顺序在相邻杆间架设电话线。Farmer John认为 加高某些电话线杆能减少架设电话线的总花费,尽管这项工作也需要支出一定的费用。 更准确地,如果他把一根电话线杆加高X米的话,他得为此付出X^2的费用。 请你帮Farmer John计算一下,如果合理地进行这两种工作,他最少要在这个电话线改造工程上花多少钱。

Input

* 第1行: 2个用空格隔开的整数:N和C

* 第2..N+1行: 第i+1行仅有一个整数:height_i

Output

* 第1行: 输出Farmer John完成电话线改造工程所需要的最小花费

Sample Input

5 2
2
3
5
1
4
输入说明:
一共有5根电话线杆,在杆间拉电话线的费用是每米高度差$2。
在改造之前,电话线杆的高度依次为2,3,5,1,4米。

Sample Output

15
输出说明:
最好的改造方法是:Farmer John把第一根电话线杆加高1米,把第四根加高2米,
使得它们的高度依次为3,3,5,3,4米。这样花在加高电线杆上的钱是$5。
此时,拉电话线的费用为$2*(0+2+2+1) = $10,总花费为$15。

 
说好的动态规划……其实最后还得用贪心优化……一个位置的最优策略完全可以分左右两边考虑,然后一边更新状态一边更新当前最优解就行了……可怜的单调性!
 
#include<cstdio>
#include<algorithm>
using namespace std; int n,c,h,le,f[][],i,j,xx;
char cs;
int read(){
cs=getchar();xx=;
while(cs<''||cs>'') cs=getchar();
while(cs>=''&&cs<='') xx=xx*+cs-,cs=getchar();
return xx;
}
int main(){
n=read();c=read();h=read();
for (i=;i+h<=;i++) f[][i+h]=i*i;
le=h;
int la=,now=,mi,x;
for (i=;i<n;i++){
swap(la,now);
h=read();
x=h;
if (h<le){
mi=f[la][le]+abs(le-h)*c;
for (j=le+;j<=;j++)
if (mi>f[la][j]+abs(j-h)*c) mi=f[la][j]+abs(j-h)*c;
for (j=h;j<le;j++) f[now][j]=mi,mi-=c;
h=le;
}
mi=f[la][le]+abs(le-h)*c;
for (j=le;j<h;j++) if (mi>f[la][j]+abs(j-h)*c) mi=f[la][j]+abs(j-h)*c;
for (;j<=;j++){
if (mi>f[la][j]) mi=f[la][j];
f[now][j]=mi;
mi+=c;
}
mi=f[la][]+c;
for (j=;j>=h;j--){
if (f[now][j]>mi) f[now][j]=mi;
if (mi>f[la][j]) mi=f[la][j];
mi+=c;
}
for (j=;j+x<=;j++) f[now][j+x]+=j*j;
le=x;
}
h=f[now][le];
for (i=le+;i<=;i++)
if (f[now][i]<h) h=f[now][i];
printf("%d\n",h);
}

最新文章

  1. Android Weekly Notes Issue #235
  2. php中抽象类与接口的概念以及区别
  3. 关于ADO.NET连接ORACLE,使用ODAC连接中的一些问题
  4. C语言中的sizeof()
  5. RabbitMQ Topic exchange
  6. http-code 未译
  7. paip.hql的调试故障排查流程总结
  8. outlook新邮件到达提醒设置以及outlook最小化到托盘设置
  9. 选数 2002年NOIP全国联赛普及组
  10. HTTP 1.1与HTTP 1.0的比较
  11. JavaScript高级程序设计30.pdf
  12. 【HDOJ】3459 Rubik 2&#215;2&#215;2
  13. 黑马程序员_JavaIO流(一)
  14. php中禁止非法调用和硬路径引入文件的方法
  15. mr本地运行的几种模式
  16. Xamarin.Android 入门之:Xamarin+vs2015 环境搭建
  17. 用node.js实现mvc相册资源管理器
  18. Django——ORM
  19. redhat7初始化yum源
  20. bzoj 3223: Tyvj 1729 文艺平衡树 (splay)

热门文章

  1. 历史命令~/.bash_history,查看所有别名alias,命令执行顺序,命令行常用快捷键,输入输出重定向,wc统计字节单词行数
  2. Node: 如何控制子进程的输出
  3. ROS初探:(一)ROS架构
  4. 447. Number of Boomerangs
  5. 599. Minimum Index Sum of Two Lists
  6. 关于a标签颜色的探索
  7. websocket教程(一) 非常有趣的理解websocket
  8. c#代码技巧
  9. 每天学一点Docker(1)
  10. Java学习笔记7---父类构造方法有无参数对子类的影响