传送门

有个结论,每一个位置修改高度后的数,一定是原来在这个数列中出现过的数

因为最终结果要么不递增要么不递减,

不递增的话,

  如果x1 >= x2那么不用动,如果x1 < x2,把x1变成x2的代价最小

不递减同理

输入数组a后,把a数组复制一份放到b中,并将b排序

f[i][j]表示前i个,当前修改为b[j]的最优解

dp的时候前缀和优化一下即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 2001
#define abs(x) ((x) < 0 ? -(x) : (x))
#define min(x, y) ((x) < (y) ? (x) : (y)) int n, ans = ~(1 << 31);
int a[N], b[N], f[N][N][2];
//f[i][j]表示前i个数,第i个数为b[j]的最优解
//0表示不下降,1表示不上升 inline int read()
{
int x = 0, f = 1;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1;
for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
return x * f;
} int main()
{
int i, j, sum;
n = read();
for(i = 1; i <= n; i++) a[i] = b[i] = read();
std::sort(b + 1, b + n + 1);
memset(f, 127, sizeof(f));
memset(f[0], 0, sizeof(f[0]));
for(i = 1; i <= n; i++)
{
sum = ~(1 << 31);
for(j = 1; j <= n; j++)
{
sum = min(sum, f[i - 1][j][0]);
f[i][j][0] = min(f[i][j][0], sum + abs(a[i] - b[j]));
}
sum = ~(1 << 31);
for(j = n; j >= 1; j--)
{
sum = min(sum, f[i - 1][j][1]);
f[i][j][1] = min(f[i][j][1], sum + abs(a[i] - b[j]));
}
}
for(i = 1; i <= n; i++)
ans = min(ans, min(f[n][i][0], f[n][i][1]));
printf("%d\n", ans);
return 0;
}

  

最新文章

  1. jQuery 2.0.3 源码分析 Deferred概念
  2. Net设计模式实例之单例模式( Singleton Pattern)
  3. 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton
  4. 懂DOS终于发挥了一点作用:phoenix bios密码破解
  5. ARM GCC 内嵌汇编手册
  6. 调用firebug-lite调试ie6
  7. web service client端调用服务器接口
  8. 【渗透课程】第三篇-体验http协议的应用
  9. interface接口
  10. [HEOI 2016] seq
  11. RxJava(十一)defer操作符实现代码支持链式调用
  12. 苹果新的编程语言 Swift 语言进阶(四)--字符串和收集类型
  13. 2、搭建一个简单的Web项目
  14. vue中@contextmenu在pc和mac中的区别
  15. is not valid JSON: json: cannot unmarshal string into Go value of type map[string]interface | mongodb在windows和Linux导出出错
  16. 什么时候layoutSubview会被调用
  17. UVA-11183 Teen Girl Squad (最小树形图、朱刘算法模板)
  18. Ubuntu16.04测网速
  19. linux命令(8):du命令
  20. git冲突解决的方法

热门文章

  1. spring 上传附件
  2. 增加和减少mongodb复制集中的节点
  3. LightOJ 1422 Halloween Costumes (区间DP,经典)
  4. 使用python模拟cookie登陆wooyun
  5. 模板类 vector
  6. BZOJ1009: [HNOI2008]GT考试 (矩阵快速幂 + DP)
  7. spring boot 下 dataTable|pagehelper 组合进行分页 筛选 排序
  8. Java常见对象Object类中的个别方法
  9. HDU-1217-Arbitrage(SPFA)
  10. hihoCoder-1097-Prim