Codeforces 13C Sequence --DP+离散化
题意:给出一个 n (1 <= n <= 5000)个数的序列 。每个操作可以把 n 个数中的某一个加1 或 减 1。问使这个序列变成非递减的操作数最少是多少
解法:定义dp[i][j]为将前i个数变为以j为结尾的非递减序列的最少操作次数。
则有: dp[i][j] = min(dp[i][j], min(dp[i][k]) + Cost(原来第i个位置上的数转换到j)) (1 <= k <= j)
即前i个数以j结尾的状态可以由前i-1个数以小于等于j的k结尾的状态转移过来,取一个最小的转移
由于输入过大,需要离散化,将数组的复制b[]排序后用到unique函数,unique函数将数组中相邻元素重复的去掉(实际不去掉,只是放到最后面),然后返回最后一个不与其他元相同的数的地址,所以通过unique(b,b+n)-b可得到该数列实际不同的数有多少个,然后我们上述方程中的j就在这些里面取,Cost其实计算方法为abs(b[j]-a[i])
同时数组不可能存下5000*5000,由于每一个状态都从前一个推来,于是可以用滚动数组。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define lll __int64
using namespace std;
#define N 5007 const lll INF = (1LL<<);
lll dp[][N];
lll a[N],b[N]; int main()
{
int n,i,j;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%I64d",&a[i]);
b[i] = a[i];
}
sort(b,b+n);
int tot = unique(b,b+n) - b; //离散化成 0~tot
for(i=;i<tot;i++)
{
dp[][i] = abs(b[i]-a[]);
dp[][i] = INF;
}
int now = ;
for(i=;i<n;i++)
{
lll mini = INF;
for(j=;j<tot;j++)
{
mini = min(dp[now^][j],mini);
dp[now][j] = min(dp[now][j],mini+abs(b[j]-a[i]));
}
now = -now;
for(j=;j<tot;j++)
dp[now][j] = INF;
}
lll mini = INF;
for(i=;i<tot;i++)
mini = min(mini,dp[-now][i]);
printf("%I64d\n",mini);
return ;
}
Codeforces 13C Sequence --DP+离散化的更多相关文章
- Codeforces 13C Sequence dp
题目链接:http://codeforces.com/problemset/problem/13/C 题意: 给定n长的序列 每次操作能够给每一个数++或-- 问最少须要几步操作使得序列变为非递减序列 ...
- Codeforces 55D (数位DP+离散化+数论)
题目链接: http://poj.org/problem?id=2117 题目大意:统计一个范围内数的个数,要求该数能被各位上的数整除.范围2^64. 解题思路: 一开始SB地开了10维数组记录情况. ...
- Codeforces 13C Sequence
http://codeforces.com/contest/13/problem/C 题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少 ...
- CodeForces 13C【DP】
题意: 给你n个数,每次只能让一个数+1,或者-1,目标是最终使这个序列构成一个非递减的序列: n是5e3,复杂度n^2内.值是1e9: 思路: 可以发现子结构是保证一个区间的非递减, 如果只是dp[ ...
- CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)
传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...
- CF13C Sequence(DP+离散化)
题目描述 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.求最少的修改次数. 输入输出样例 输入 #1 - 输出 #1 4 输入 #2 输出 #2 1 解题思路 这题是一道非常好题 ...
- POJ - 3666 Making the Grade(dp+离散化)
Description A straight dirt road connects two fields on FJ's farm, but it changes elevation more tha ...
- codeforces 55D - Beautiful numbers(数位DP+离散化)
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #277 (Div. 2) E. LIS of Sequence DP
E. LIS of Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/486/pr ...
随机推荐
- java多线程(一)——线程安全的单例模式
概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3. ...
- OWIN概述
关于OWIN OWIN defines a standard interface between .NET web servers and web applications. The goal of ...
- Android 手机卫士17--缓存清理
清理单个应用缓存 通过反射调用方法 需要权限:android.permission.DELETE_CACHE_FILES. 以上权限为系统权限,手机卫士应用为用户应用,不能拿到此权限 换思路: 调用系 ...
- js的alert和confirm美化
--前言-- window对象的alert和confirm标准方法在不同浏览器的显示效果不太相同,有个相同点是都不是很美观.我们的想法是使用js和css分别仿照它们,提供另一套函数,使在不同浏览器的有 ...
- 为网站添加ico图标
1.将目标图片装换为.ico格式 在线转换工具:http://www.bitbug.net/ 2.将装换后的图标放入项目文件中,一般命名为favicon 3.在项目文件的index页面中引入 < ...
- HTML 5 中的标准属性
HTML 全局属性 HTML 属性赋予元素意义和语境. 下面的全局属性可用于任何 HTML 元素. (5)= HTML5 中添加的属性. 属性 描述 accesskey 规定激活元素的快捷键. cla ...
- Bonobo Git Server (Simple git server for Windows.) 测试备忘
Bonobo Git Server是一款Windows上的Git Server,它使用IIS即可,走的是Http协议,只要简单的安装就能使用,但是因为我的项目大小有1.35GB在 push 的时候一直 ...
- 换iphone5屏幕你花了多少钱?不防我们看下市场的批发价格
看来人家批发价也不便宜啊,你修一块花了多少米 免费b2b平台 US $1 - 79.99 / Piece Factory Price for iphone 5" lcd alibaba ...
- gradle研究
gradle介绍:http://www.oschina.net/p/gradle gradle官网:https://gradle.org gradle的 eclipse 插件:http://www. ...
- Sublime Text3 C++及Java开发环境配置
一.C++开发环境配置 1. 下载MingW 2. 环境变量配置,系统属性->高级设置->环境变量,如果Mingw装在c盘更目录,其它自己思考 (1)PATH 变量值中加入 C:\Min ...