CodeForces 13C【DP】
题意:
给你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】相关推荐
- 【DP】【期望】$P1850$换教室
[DP][期望]\(P1850\)换教室 链接 题目描述 有 \(2n\) 节课程安排在$ n$ 个时间段上.在第 \(i\)(\(1 \leq i \leq n\))个时间段上,两节内容相同的课程同 ...
- Bailian2760 数字三角形【DP】
2760:数字三角形 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (图1) 图1给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可 ...
- NUC1131 Triangle【DP】
Triangle 时间限制: 1000ms 内存限制: 65536KB 通过次数: 1总提交次数: 1 问题描述 图1表示一个数字三角形. 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 ...
- LeetCode:完全平方数【279】【DP】
LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示 ...
- 【DP】序列 题解
[DP]序列 题解 序列 题目 一个长度为kkk的整数序列bbb 1,bbb 2,-,bkbkbk(1≤bbb 1≤bbb 2≤-≤bkbkbk≤NNN)称为"好序列"当且仅当后一 ...
- CodeForces 711C.Coloring Trees【DP】
看上去就是DP的一个题,由于自己太菜了,还是不会做 先给个提交的地方:cf 711C 这个题看到数据,很明显是dp,因为n,m,k的值都不大,我们可以建立矩阵来推理 很明显答案跟dp[n][k]有关 ...
- Codeforces 1000D Yet Another Problem On a Subsequence 【dp】【组合数学】
难点在于怎么想dp,我一开始想dp[i][j]代表前i个数挑j个能组成多少个good sebsequence,最后把dp[n][ 2到n ]加起来就行,但想不出来转移方程怎么做.后来想到我这么想是不对 ...
- poj 2411 Mondriaan#39;s Dream 【dp】
题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...
- BestCoder冠军赛 - 1005 Game 【DP】
[题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时, ...
最新文章
- 【Oracle】逻辑结构(TableSpace→Segment→Extent→Block)
- oracle中右击出现的含义,Oracle中经典的问题解决方案-Oracle
- 虚幻4蓝图快速入门(二)
- Go基础编程:Go语言介绍
- JSON学习笔记(三)- 数组
- 【软件架构】软件架构设计常用概念、原则与思想
- pip install时出现问题,ERROR: Could not install packages due to an OSError: ./lib/python3.7/site-packages
- iOS开发小技巧 -- tableView-section圆角边框解决方案
- 拖拽动态生成网页-VvvebJs
- 【面试】造价工程师面试试题汇总
- 使用java实现敏感词汇过滤功能
- 解决iframe嵌套微信公众号文章图片不显示的方案
- 硬件系统工程师需要具备哪些技能
- 删除win10自带微软中文输入法
- 基于连续优化的规划算法:以二次规划为例
- recycler 刷新图片闪烁_android 解决RecyclerView notifyDataSetChanged刷新闪屏问题(图片刷新)...
- 基于yolov5轻量级的学生上课姿势检测识别分析系统
- 【FPGA】实战之创建项目
- 阿喀琉斯之踵的含义是什么?
- Java后端校验框架oval与hibernatevalidator的使用
热门文章
- 字符串和数组中split().toString(),join(),splice(),slice(),substr()和substring()
- KOFLive Beta Daily-Scrum 2
- 纯野今日之最:面试谈
- 诗歌rails之头像上传和调整
- access中case替代方法
- (91)多人投票器(五人投票器)
- 6 SystemVerilog语言编写售货机
- linux vg划分目录,修改根目录所在VG名称
- python 静态方法_Python编程思想(25):方法深度解析
- 自己在win10中添加ADO控件步骤总结