题意:

给你n个数,每次只能让一个数+1,或者-1,目标是最终使这个序列构成一个非递减的序列;

n是5e3,复杂度n^2内。值是1e9;

思路:

可以发现子结构是保证一个区间的非递减,

如果只是dp[a][b]代表在[a,b]上需要的最小步数,这样很难处理a,b位置的值,且不构成递推性;

所以可以在递推中(前i个)去dp以 j 值为末端的区间需要的最小步数。

dp[i][j]=min(dp[i][j],min(dp[i][k]+cost); //k∈[1-j];

然而j值是1e9,且特么n是5e3都好大啊;如果小点就好做了。

看了题解上面的方法可以离散化搞一搞,可是好麻烦。

有一个结论:变化后的每一个值肯定是等于原来序列的某个值。

那么变化后我们知道是非递减的,所以问题就转变为a数组变成b数组求一个最小花费;

dp[i][j]为a序列前i个以b[j]结尾的b序列的最小花费

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<string.h>
  4. #include<algorithm>
  5. using namespace std;
  6. typedef long long LL;
  7. const int N=5e3+10;
  8. int a[N];
  9. int b[N];
  10. LL dp[N];
  11. int main()
  12. {
  13. int n;
  14. scanf("%d",&n);
  15. for(int i=0;i<n;i++)
  16. {
  17. scanf("%d",&a[i]);
  18. b[i]=a[i];
  19. }
  20. sort(b,b+n);
  21. memset(dp,0,sizeof(dp));
  22. for(int i=0;i<n;i++){
  23. for(int j=0;j<n;j++)
  24. {
  25. dp[j]+=abs(a[i]-b[j]);
  26. if(j)
  27. dp[j]=min(dp[j-1],dp[j]);
  28. }
  29. }
  30. printf("%I64d\n",dp[n-1]);
  31. return 0;
  32. }

CodeForces 13C【DP】的更多相关文章

  1. CodeForces 106C 【DP】

    题意: n g dough  m种商品? 每种有ai stuffing, 拿bi stuffing + ci dough -> di tugriks rest c0 dough -> d0 ...

  2. CodeForces 761C 【DP】

    总结:能这么DP就这么写! 多练位运算标记. #include<bits/stdc++.h> using namespace::std; const int N=55; const int ...

  3. Codeforces 358D【DP】

    思路:  dp[i][0] 代表取的时候左边没有 dp[i][1] 代表取的时候右边没有 dp[i][2] 代表取的时候左右都没有 dp[i][3] 代表取的时候左右都有 然后自己转移吧= =. 注意 ...

  4. CodeForces 687C【DP】

    题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合 ...

  5. CodeForces 429B【dp】

    题意: 在一个n*m的矩阵中有两只虫子,一只从左上角向右下角移动,另外一只从左下角向右上角移动. 要求: 1.第一只虫子每次只能向左或者向下移动一格,另外一只只能向上或者向右移动一格. 2.两只虫子的 ...

  6. [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】

    [CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...

  7. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  8. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  9. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

随机推荐

  1. SQL ORDER BY 关键字

    SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序. SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序. ORDER BY ...

  2. css设置图片居中、居左、居右

      CreateTime--2017年12月8日14:25:09 Author:Marydon css设置图片居中.居左.居右 图片一般默认是居左显示的,如何更改它的水平位置呢? <div st ...

  3. mybatis 动态curd

    xml <select id="selectByCondition" parameterType="com.oracle.pojo.Student" re ...

  4. 转移iOS App常见问题和回答

    打算转移公司的app,做下转移的记录 怎样转移app官方的一个视频:http://v.youku.com/v_show/id_XNjI0MjQxMzI0.html 以下是apple官方转移常见问题回答 ...

  5. MTK 手机芯片 2014 Roadmap

    注:其中 A53 架构的是 64 位处理器. MT6733 魅蓝 MT6752 魅族 note 联通/移动版 MT6595 魅族 MX4

  6. 不能实现RadioButton默认选择

    当用RadioButton时,希望在程序运行的时候默认一个选项: CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1); //CheckRadioBut ...

  7. 20170225 ABAP获取字符串长度/字节长度

    函数YGET_CHAR_LONG: FUNCTION YGET_CHAR_LONG. *"-------------------------------------------------- ...

  8. 使用Windows Debugger调试托管代码----引用自官方帮助文档

    以下文字引用在Windbg的帮助文档.觉得对初次调试托管代码,非常有用,故粘贴至此. ========================================================= ...

  9. YTU 2417: C语言习题 字符串长度

    2417: C语言习题 字符串长度 时间限制: 1 Sec  内存限制: 128 MB 提交: 758  解决: 548 题目描述 写一函数,求一个字符串的长度.在main函数中输入字符串,并输出其长 ...

  10. poj 2406 Power Strings(kmp求一个串的重复子串)

    题意:重复子串次数 思路:kmp #include<iostream> #include<stdio.h> #include<string.h> using nam ...