思路:dp[i]=dp[j]+(num[i]-num[j+1])^2;

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#define Maxn 1000010
#define LL unsigned __int64
using namespace std;
LL dp[Maxn],num[Maxn];
int que[Maxn*];
inline int ReadInt()
{
char ch = getchar();
int data = ;
while (ch < '' || ch > '')
ch = getchar();
do
{
data = data* + ch-'';
ch = getchar();
} while (ch >= '' && ch <= '');
return data;
}
int main()
{
int n,i,j;
LL c;
while(scanf("%d%I64u",&n,&c)!=EOF,n||c){
memset(dp,,sizeof(dp));
for(i=;i<=n;i++)
num[i]=(LL)ReadInt();
int head,rear;
head=;rear=;
que[++rear]=;
dp[]=;
for(i=;i<=n;i++){
while(head<rear&&(dp[que[head+]]+num[que[head+]+]*num[que[head+]+]-(dp[que[head]]+num[que[head]+]*num[que[head]+])<=*num[i]*(num[que[head+]+]-num[que[head]+])))
head++;
dp[i]=dp[que[head]]+(num[i]-num[que[head]+])*(num[i]-num[que[head]+])+c;
while(head<rear&&(dp[i]+num[i+]*num[i+]-(dp[que[rear]]+num[que[rear]+]*num[que[rear]+]))*(num[que[rear]+]-num[que[rear-]+])<=(dp[que[rear]]+num[que[rear]+]*num[que[rear]+]-(dp[que[rear-]]+num[que[rear-]+]*num[que[rear-]+]))*(num[i+]-num[que[rear]+]))
rear--;
que[++rear]=i;
}
printf("%I64u\n",dp[n]);
}
return ;
}

最新文章

  1. TSQL 分组集(Grouping Sets)
  2. mysql datetime查询异常
  3. PHP基础知识之————php5-cli 的安装以及phpredis的安装
  4. 搭建自己的ngrok服务
  5. 前端JS开发框架-DHTMLX
  6. 怎样让HTML5调用手机摄像头拍照——实践就是一切
  7. 解决phpmailer可以在windows下面发送成功, 在linux下面失败的问题
  8. 【Egret】Lakeshore 使用中的一些疑难解决技巧!
  9. 游戏UI框架设计(五): 配置管理与应用
  10. Java 逆变与协变的名词说明
  11. EmEditor编辑器正则表达式的优点
  12. 软件工程HW1-四则运算软件
  13. Swing-选项卡面板JTabbedPane-入门
  14. js对象数组(JSON) 根据某个共同字段 分组
  15. u3d常用代码小集合
  16. ES6 export
  17. linux lftp
  18. MVC的BundleConfig应用
  19. Docker 快速入门教程
  20. Loj#6434「PKUSC2018」主斗地(搜索)

热门文章

  1. DongDong坐飞机
  2. 问题001:Java软件,属于系统软件还是应用软件呢?
  3. 微信公众帐号开发之一(java)
  4. 九、MySQL 创建数据表
  5. 模块之 logging模块 time 模块 random模块 sys模块 pickle模块
  6. 动态规划:HDU1224-Free DIY Tour
  7. 17,基于scrapy-redis两种形式的分布式爬虫
  8. time模块和datetime模块详解
  9. Elastic Search和Kibana入门
  10. sql server 不可见字符处理 总结