韩父有N个儿子,分别是韩一,韩二…韩N。由于韩家演技功底深厚,加上他们间的密切配合,演出获得了巨大成功,票房甚至高达2000万。舟子是名很有威望的公知,可是他表面上两袖清风实则内心阴暗,看到韩家红红火火,嫉妒心遂起,便发微薄调侃韩二们站成一列时身高参差不齐。由于舟子的影响力,随口一句便会造成韩家的巨大损失,具体亏损是这样计算的,韩一,韩二…韩N站成一排,损失即为C×(韩i与韩i+1的高度差(1≤i<N))之和,搞不好连女儿都赔了.韩父苦苦思索,决定给韩子们内增高(注意韩子们变矮是不科学的只能增高或什么也不做),增高1cm是很容易的,可是增高10cm花费就很大了,对任意韩ii,增高Hcm的花费是H2.请你帮助韩父让韩家损失最小。

Input

有若干组数据,一直处理到文件结束。

每组数据第一行为两个整数:韩子数量N(1≤N≤50000)和舟子系数C(1≤C≤100)

接下来NN行分别是韩i的高度(1≤hi≤100)。

Output

对每组测试数据用一行输出韩家的最小损失。

Sample Input

5 2
2
3
5
1
4

Sample Output

15

Hint

输入数据多请使用scanf代替cin


  f[i][j]表示第i个人,高度为j的最小损失,显然

  然后乱搞一下,分类发讨论一下绝对值,把无关项都移出来,于是得到了

  接着跑两道单调队列优化就好了,总时间复杂度O(100n),动态规划的空间复杂度如果开滚动数组就是O(200)

  由于此题比较特殊,所以可以直接更新一个变量,单调队列都不用了。

Code

 /**
* UESTC
* Problem#594
* Accepted
* Time:364ms
* Memory:1364k
*/
#include<iostream>
#include<cstdio>
using namespace std;
typedef bool boolean;
#define inf 0x3fffffff
#define smin(a, b) (a) = min((a), (b))
#define smax(a, b) (a) = max((a), (b)) int n, c;
int *h;
int t;
int f[][]; inline boolean init() {
if(scanf("%d%d", &n, &c) == -) return false;
h = new int[(const int)(n + )];
for(int i = ; i <= n; i++) {
scanf("%d", h + i);
}
return true;
} int q[];
int rear;
inline void solve() {
t = ;
for(int i = ; i < h[]; i++)
f[t][i] = inf;
for(int i = h[]; i <= ; i++)
f[t][i] = (i - h[]) * (i - h[]);
for(int i = ; i <= n; i++) {
t ^= ;
rear = ;
for(int j = ; j <= ; j++) {
int val = f[t ^ ][j] - j * c;
while(rear && q[rear] > val) rear--;
q[++rear] = val;
if(j < h[i])
f[t][j] = inf;
else
f[t][j] = q[] + j * c + (j - h[i]) * (j - h[i]);
}
rear = ;
for(int j = ; j >= h[i]; j--) {
int val = f[t ^ ][j] + j * c;
while(rear && q[rear] > val) rear--;
q[++rear] = val;
smin(f[t][j], q[] - j * c + (j - h[i]) * (j - h[i]));
}
}
int res = inf;
for(int i = ; i <= ; i++)
smin(res, f[t][i]);
printf("%d\n", res);
delete[] h;
} int main() {
while(init()) {
solve();
}
return ;
}

类似单调队列的代码

Code(常数优化后的代码)

 /**
* UESTC
* Problem#594
* Accepted
* Time:136ms
* Memory:1172k
*/
#include<iostream>
#include<cstdio>
using namespace std;
typedef bool boolean;
#define inf 0x3fffffff
#define smin(a, b) (a) = min((a), (b))
#define smax(a, b) (a) = max((a), (b)) int n, c;
int t;
int h[];
int f[][]; inline boolean init() {
if(scanf("%d%d", &n, &c) == -) return false;
for(int i = ; i <= n; i++) {
scanf("%d", h + i);
}
return true;
} int cmp;
inline void solve() {
t = ;
for(int i = ; i < h[]; i++)
f[t][i] = inf;
for(int i = h[]; i <= ; i++)
f[t][i] = (i - h[]) * (i - h[]);
for(int i = ; i <= n; i++) {
t ^= ;
cmp = inf;
for(int j = ; j <= ; j++) {
int val = f[t ^ ][j] - j * c;
smin(cmp, val);
if(j < h[i])
f[t][j] = inf;
else
f[t][j] = cmp + j * c + (j - h[i]) * (j - h[i]);
}
cmp = inf;
for(int j = ; j >= h[i]; j--) {
int val = f[t ^ ][j] + j * c;
smin(cmp, val);
smin(f[t][j], cmp - j * c + (j - h[i]) * (j - h[i]));
}
}
int res = inf;
for(int i = ; i <= ; i++)
smin(res, f[t][i]);
printf("%d\n", res);
} int main() {
while(init()) {
solve();
}
return ;
}

UESTC 594 我要长高 - 单调性优化的更多相关文章

  1. 【单调队列优化dp】uestc 594 我要长高

    http://acm.uestc.edu.cn/#/problem/show/594 [AC] #include<bits/stdc++.h> using namespace std; t ...

  2. UESTC - 594 我要长高

    他们oj挂掉啦, 我先保存一下代码... 直接dp复杂度, n * 100 * 100, 我们可以将前一个人的信息丢进单调队列中去,可以优化成n * 100; #include<bits/std ...

  3. 性能调优之MYSQL高并发优化

    性能调优之MYSQL高并发优化   一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之 ...

  4. CF868F Yet Another Minimization Problem 分治决策单调性优化DP

    题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价. 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$ ...

  5. Mysql占用CPU过高如何优化,如何解决

    2017-02-28 15:13 331人阅读 评论(0) 收藏 举报   MySQL占用CPU过高如何优化 一次生产DB服务器的 超负荷运行问题解决: 1.查看生产DB服务器top列表, 执行 to ...

  6. dp 单调性优化总结

    对于单调性优化其实更多的是观察dp的状态转移式子的单调性 进而用优先队列 单调队列 二分查找什么的找到最优决策 使时间更优. 对于这道题就是单调性优化的很好的例子 首先打一个暴力再说. f[i][j] ...

  7. Apache Tomcat 8.5 安全配置与高并发优化

    通常我们在生产环境中,Tomcat的默认配置显然不能满足我们的产品需求,所以很多时候都需要对Tomcat的配置进行调优,以下综合我自己的经验来配置 Tomcat 安全与优化情况,如果你有更好的方案,请 ...

  8. 一看就懂的MySQL的聚簇索引,以及聚簇索引是如何长高的

    这一篇笔记我们简述一下 MySQL的B+Tree索引到底是咋回事? 聚簇索引索引到底是如何长高的. 一点一点看,其实蛮好理解的. 如果你看过了我之前的笔记,你肯定知道了MySQL进行CRUD是在内存中 ...

  9. 洛谷 P5897 - [IOI2013]wombats(决策单调性优化 dp+线段树分块)

    题面传送门 首先注意到这次行数与列数不同阶,列数只有 \(200\),而行数高达 \(5000\),因此可以考虑以行为下标建线段树,线段树上每个区间 \([l,r]\) 开一个 \(200\times ...

随机推荐

  1. hadoop(角色)各个组件配置信息

    1)namenode:        core-site.xml文件中决定:            <property>                <name>fs.def ...

  2. OC中分类(Category)和扩展(Extension)

    1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...

  3. https-->http and http-->https bitransfer

    openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem -ve ...

  4. 2018/03/09 每日一个Linux命令 之 chgrp/chown

    每日一个Linux命令 2018-03-09 Linux 命令 chgrp/chown chgrp [-参数] [文件或者目录] chown [-参数] [文件所有者]:[文件所属群组] [文件或者目 ...

  5. linux find 命令

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  6. sublime 使用总结

    不管你用什么编辑,sublime是首选编辑器,就是sublime淘汰,但已成为标准.例如:atom,几乎等同于sublime,及其他可以几乎调成到sublime操作方式. 一.常用插件 插件搜索地址: ...

  7. Mirror--如何对运行中的镜像端点更换证书

    如果使用证书配置镜像时,没有设置证书的时间,则默认证书有效期为一年,当证书快过期时,需要更换证书. 下面代码演示如何对正在运行的镜像更换证书 --=========================== ...

  8. Unity3d 镜面折射 vertex and frag Shader源代码

    Unity3d 镜面折射  网上能找到的基本上是固定管道或表面渲染的shader. 特此翻译为顶点.片段渲染的Shader, 本源代码仅仅涉及shader与cs部分, 请自行下载NGUI  unity ...

  9. CSS表格(未完成)

    CSS 表格 使用 CSS 可以使 HTML 表格更美观. 表格边框 指定CSS表格边框,使用border属性. 下面的例子指定了一个表格的Th和TD元素的黑色边框:

  10. js中去除字符串两边的空格

    在提交表单的时候会需要去除字符串两边的空格,代码如下: /*去除字符串两边空格*/ String.prototype.trim = function() { return this.replace(/ ...