题意:
给你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序列的最小花费

#include<cstdio>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;typedef long long LL;const int N=5e3+10;int a[N];
int b[N];
LL dp[N];int main()
{int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);b[i]=a[i];}sort(b,b+n);memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){for(int j=0;j<n;j++){dp[j]+=abs(a[i]-b[j]);if(j)dp[j]=min(dp[j-1],dp[j]);}}printf("%I64d\n",dp[n-1]);return 0;
}

转载于:https://www.cnblogs.com/keyboarder-zsq/p/5934852.html

CodeForces 13C【DP】相关推荐

  1. 【DP】【期望】$P1850$换教室

    [DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...

  2. Bailian2760 数字三角形【DP】

    2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...

  3. NUC1131 Triangle【DP】

    Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...

  4. LeetCode:完全平方数【279】【DP】

    LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...

  5. 【DP】序列 题解

    [DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...

  6. CodeForces 711C.Coloring Trees【DP】

    看上去就是DP的一个题,由于自己太菜了,还是不会做 先给个提交的地方:cf 711C 这个题看到数据,很明显是dp,因为n,m,k的值都不大,我们可以建立矩阵来推理 很明显答案跟dp[n][k]有关 ...

  7. Codeforces 1000D Yet Another Problem On a Subsequence 【dp】【组合数学】

    难点在于怎么想dp,我一开始想dp[i][j]代表前i个数挑j个能组成多少个good sebsequence,最后把dp[n][ 2到n ]加起来就行,但想不出来转移方程怎么做.后来想到我这么想是不对 ...

  8. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  9. BestCoder冠军赛 - 1005 Game 【DP】

    [题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...

最新文章

  1. 【Oracle】逻辑结构(TableSpace→Segment→Extent→Block)
  2. oracle中右击出现的含义,Oracle中经典的问题解决方案-Oracle
  3. 虚幻4蓝图快速入门(二)
  4. Go基础编程:Go语言介绍
  5. JSON学习笔记(三)- 数组
  6. 【软件架构】软件架构设计常用概念、原则与思想
  7. pip install时出现问题,ERROR: Could not install packages due to an OSError: ./lib/python3.7/site-packages
  8. iOS开发小技巧 -- tableView-section圆角边框解决方案
  9. 拖拽动态生成网页-VvvebJs
  10. 【面试】造价工程师面试试题汇总
  11. 使用java实现敏感词汇过滤功能
  12. 解决iframe嵌套微信公众号文章图片不显示的方案
  13. 硬件系统工程师需要具备哪些技能
  14. 删除win10自带微软中文输入法
  15. 基于连续优化的规划算法:以二次规划为例
  16. recycler 刷新图片闪烁_android 解决RecyclerView notifyDataSetChanged刷新闪屏问题(图片刷新)...
  17. 基于yolov5轻量级的学生上课姿势检测识别分析系统
  18. 【FPGA】实战之创建项目
  19. 阿喀琉斯之踵的含义是什么?
  20. Java后端校验框架oval与hibernatevalidator的使用

热门文章

  1. 字符串和数组中split().toString(),join(),splice(),slice(),substr()和substring()
  2. KOFLive Beta Daily-Scrum 2
  3. 纯野今日之最:面试谈
  4. 诗歌rails之头像上传和调整
  5. access中case替代方法
  6. (91)多人投票器(五人投票器)
  7. 6 SystemVerilog语言编写售货机
  8. linux vg划分目录,修改根目录所在VG名称
  9. python 静态方法_Python编程思想(25):方法深度解析
  10. 自己在win10中添加ADO控件步骤总结