题目描述 Description

Mr. Ling打算好好修一下学校门口的那条凹凸不平的路。按照Mr. Ling的设想,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中。

整条路被分成了N段,N个整数A_1,…,A_N依次描述了每一段路的高度。Mr.Ling希望找到一个恰好含N个元素的不上升或不下降序列B_1,...,B_N,作为修过的路中每个路段的高度。由于将每一段路垫高或挖低一个单位的花费相同,修路的总支出可以表示为:

|A_1 - B_1| + |A_2 - B_2| + ... + |A_N - B_N|

请你计算一下,Mr. Ling在这项工程上的最小支出是多少。Mr. Ling向你保证,这个支出不会超过2^31-1。

输入描述 Input Description

第1行:输入1个整数N;

第2..N+1行:第i+1行为i个整数A_i

输出描述 Output Description

第1行:输出1个正整数,表示把路修成高度不上升或高度不下降的最小花费。

样例输入 Sample Input

7

1

3

2

4

5

3

9

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

【样例说明】

将第一个高度为3的路段的高度减少为2,将第二个高度为3的路段的高度增加到5,总花费为|2-3|+|5-3| = 3,并且各路段的高度为一个不下降序列1,2,2,4,5,5,9。

【数据范围】

30%的数据:1< N≤50,0≤ A_i ≤1,000;

100%的数据:1≤ N≤2000,0≤ A_i ≤1,000,000,000。

  1. /*
  2. 修改次数不会达到n,修改的数值一定是原先存在的
  3. */
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<string>
  7. #include<cstring>
  8. #include<algorithm>
  9. #include<cmath>
  10. #define ll long long
  11. using namespace std;
  12. const int maxn = ;
  13. const ll inf = 98765432101234LL;
  14. struct orz{
  15. ll p;
  16. ll v;
  17. };
  18. bool cmp(orz a,orz b){
  19. return a.v < b.v;
  20. }
  21. ll n,k,a[maxn],dp[maxn][maxn],dp2[maxn][maxn],ans;
  22. orz b[maxn];
  23. inline ll read(){
  24. char ch=getchar();
  25. ll f=,x=;
  26. while(!(ch>=''&&ch<='')){if(ch=='-')f=-;ch=getchar();};
  27. while(ch>=''&&ch<=''){x=x*+(ch-'');ch=getchar();};
  28. return x*f;
  29. }
  30.  
  31. int main(){
  32. n = read();
  33. for(int i = ;i <= n;i++){
  34. a[i] = b[i].v = read();
  35. b[i].p = i;
  36. }
  37. sort(b+,b++n,cmp);
  38. for(int i = ;i <= n;i++){
  39. for(int j = ;j <= n;j++){
  40. dp[i][j] = dp2[i][j] = inf;
  41. }
  42. }
  43. for(int i = ;i <= n;i++){
  44. for(int j = ;j <= n;j++){
  45. dp[i][j] = min(dp[i][j],dp[i][j-]);
  46. dp[i][j] = min(dp[i][j],dp[i-][j]+abs(b[j].v-a[i]));
  47. }
  48. }
  49. for(int i = n;i >= ;i--){
  50. for(int j = ;j <= n;j++){
  51. dp2[i][j] = min(dp2[i][j],dp2[i][j-]);
  52. dp2[i][j] = min(dp2[i][j],dp2[i+][j]+abs(b[j].v-a[i]));
  53. }
  54. }
  55. cout<<min(dp[n][n],dp2[][n])<<endl;
  56. return ;
  57. }

codevs2572 路面修整的更多相关文章

  1. BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )

    最优的做法最后路面的高度一定是原来某一路面的高度. dp(x, t) = min{ dp(x - 1, k) } + | H[x] - h(t) | ( 1 <= k <= t ) 表示前 ...

  2. 1592: [Usaco2008 Feb]Making the Grade 路面修整

    1592: [Usaco2008 Feb]Making the Grade 路面修整 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 428  Solv ...

  3. [BZOJ 1592] Making The Grade路面修整

    1592: [Usaco2008 Feb]Making the Grade 路面修整 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 704  Solv ...

  4. [bzoj1592][Usaco09Feb]Making the Grade 路面修整_动态规划

    Making the Grade 路面修整 bzoj-1592 题目大意:给你n段路,每段路有一个高度h[i],将h[i]修改成h[i]$\pm\delta$的代价为$\delta$,求将这n段路修成 ...

  5. [usaco2008feb_gold]路面修整

      FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个整数A_1 ...

  6. BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整

    Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了 ...

  7. 2014.6.14模拟赛【bzoj1592】[Usaco2008 Feb]Making the Grade 路面修整

    Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了 ...

  8. NOIP模拟赛 路面修整

    [题目描述] FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个 ...

  9. 【贪心】bzoj1592: [Usaco2008 Feb]Making the Grade 路面修整

    贪心的经典套路:替换思想:有点抽象 Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也 就是说,高度上升与高度下降的路段不能 ...

随机推荐

  1. hortonworks2.5.3 install step log

    1.创建本地YUM源,下载TAR.GZ HDP,HDP-UTILS,AMBARI介质安装HTTPD,在/VAR/WWW/HTML/下创建三个相应的目录,把以上解压的三个目录链接过来在三个目录中执行命令 ...

  2. 遍历List集合,删除符合条件的元素

    List集合的遍历有三种方式:增强for循环,普通for循环,Iterator迭代器遍历 如果只是对集合进行遍历,以上三种循环都可正常遍历: (1)增强For循环遍历List集合 List<St ...

  3. vi快捷键

    /** * eclipse内置快捷: * * * 导入包:Ctrl+Shift+O * Ctrl+T 查看一个类的继承关系树,是自顶向下的,再多按一次Ctrl+T, 会换成自底向上的显示结构. 提示: ...

  4. JSP前三章测试改错

    分析:文件.数据库都是持久化保存数据的,所以是正确的,而servletcontext是上下文对象当然也可以.所以正确答案为A 分析: A:判断学员是否手动安装过Tomcat(练习熟练度) B:使学员了 ...

  5. svg拉伸,原来凹凸可以这么玩

    原文:http://www.smartjava.org/content/render-geographic-information-3d-threejs-and-d3js The last coupl ...

  6. title与alt的区别

    html中的title属性和alt属性让人有些混淆. 以前不知道有title这个属性,第一次用到它时,就和alt产生了混淆.一位朋友告诉我说,alt是图片img标签里用的,title是超链接里用的, ...

  7. 【跟着子迟品 underscore】for ... in 存在的浏览器兼容问题你造吗

    Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...

  8. CSS基本知识3-CSS盒模型

    box-sizing: content-box|border-box|inherit; 值 描述 content-box 这是由 CSS2.1 规定的宽度高度行为. 宽度和高度分别应用到元素的内容框. ...

  9. java8日期时间

    ###与时间有关的5个包* java.time* java.time.chrono* java.time.format* java.time.temporal* java.time.zone###ja ...

  10. Centos6.5入侵清理

    今天早上来,网站打不开.通过xshell打不开终端,很久才打开.发现内存占用率高达95%,loadavg 15  16  16 现状: 负载太高     15        15            ...