poj3666
一道不错的dp题
就是最小修改代价,使序列变为一个非下降序或非上升(由于数据较弱直接求非下降即可,当然非上升非下降本质是一样的)
观察可得到,修改后得到的数列中的元素最后一定都在原序列中;
由此我们可以将原数列排序离散化;
在dp[i,j]表示新序列到第i个元素修改成原序列第j小的数所用的代价
易得dp[i,j]=min(dp[i-1,k])+abs(p[i]-a[j]) (1<=k<=j); a是原数列,p是排序后的
由于n<=1000 看起来这样的方程式O(n^3)会超时;
实际上,我们在处理的时候,完全可以优化成O(n^2);
由于abs(p[i]-a[j])是一个定值,不受k影响,所以我们可以先用dp[i,j]表示min(dp[i-1,k]) (1<=k<=j)
则dp[i,j+1]=min(d[i,j],d[i-1,j]);
最后再集体加上abs(p[i]-a[j])即可实现O(n^2)
var f:array[..,..] of longint;
a,p:array[..] of longint;
n,i,k1,k2,j,ans:longint; procedure swap(var a,b:longint);
var c:longint;
begin
c:=a;
a:=b;
b:=c;
end; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure sort(l,r: longint);
var i,j,x: longint;
begin
i:=l;
j:=r;
x:=a[(l+r) div ];
repeat
while a[i]<x do inc(i);
while x<a[j] do dec(j);
if not(i>j) then
begin
swap(a[i],a[j]);
inc(i);
j:=j-;
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r);
end; begin
readln(n);
for i:= to n do
begin
readln(a[i]);
p[i]:=a[i];
end;
sort(,n);
k1:=;
k2:=;
for i:= to n do
begin
k1:=k1 xor ;
k2:=k2 xor ;
f[k2,]:=f[k1,];
for j:= to n do
f[k2,j]:=min(f[k2,j-],f[k1,j]);
for j:= to n do
f[k2,j]:=f[k2,j]+abs(p[i]-a[j]);
end;
ans:=;
for i:= to n do
ans:=min(f[k2,i],ans);
writeln(ans);
end.
poj3666的更多相关文章
- BZOJ1592 POJ3666 [Usaco2008 Feb]Making the Grade 路面修整 左偏树 可并堆
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3666 题目传送门 - BZOJ1592 题意概括 整条路被分成了N段,N个整数A_1, ... , ...
- POJ3666 线性dp_离散化_贪心
POJ3666 线性dp_离散化_贪心 就DP而言这个题不算难,但是难就难在贪心,还有离散化的思想上 题目大意:n个土堆,问你最少移动多少单位的图,可以使得这n个土堆变成单调的 dp[i][j]表示前 ...
- POJ3666 Making the Grade
POJ3666 Making the Grade 题意: 给定一个长度为n的序列A,构造一个长度为n的序列B,满足b非严格单调,并且最小化S=∑i=1N |Ai-Bi|,求出这个最小值S,1<= ...
- poj-3666
http://vjudge.net/problem/POJ-3666 题目是dp 题目; 简单dp 离散一下就好. 我们先来讲一讲不离散的,简单的懂了,其他的也很容易. dp[i] 代表这个数列以 ...
- LG2893/POJ3666 「USACO2008FEB」Making the Grade 线性DP+决策集优化
问题描述 LG2893 POJ3666 题解 对于\(A\)中的每一个元素,都将存在于\(B\)中. 对\(A\)离散化. 设\(opt_{i,j}\)代表\([1,i]\),结尾为\(j\)的最小代 ...
- Making the Grade(POJ3666)
题目大意: 给出长度为n的整数数列,每次可以将一个数加1或者减1,最少要多少次可以将其变成单调增或者单调减(不严格). 题解: 1.一开始我有一个猜想,就是不管怎么改变,最终的所有数都是原来的某个数. ...
- [poj3666]Making the Grade(DP/左偏树)
题目大意:给你一个序列a[1....n],让你求一个序列b[1....n],满足 bi =a && bc,则最小的调整可以是把b变成c. 所以归纳可知上面结论成立. dp[i][j] ...
- Making the Grade [POJ3666] [DP]
题意: 给定一个序列,以最小代价将其变成单调不增或单调不减序列,代价为Σabs(i变化后-i变化前),序列长度<=2000,单个数字<=1e9 输入:(第一行表示序列长度,之后一行一个表示 ...
- 【POJ3666】Making the Grade 离散化+DP
学到了一个引理:在满足S最小化的条件下,一定存在一种构造序列B的方案,使得序列B中的数值都来自于A中.(数学归纳法+中位数定理得证) 对于状态的表示来说,首先肯定有一个 i ,表示选到了第 i 个数时 ...
随机推荐
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- Catalyst揭秘 Day7 SQL转为RDD的具体实现
Catalyst揭秘 Day7 SQL转为RDD的具体实现 从技术角度,越底层和硬件偶尔越高,可动弹的空间越小,而越高层,可动用的智慧是更多.Catalyst就是个高层的智慧. Catalyst已经逐 ...
- IIs上MP4、及SVG格式加载失败解决方式
部署项目是遇到网页播放mp4文件时候,MP4文件不能加载的问题.那是因为IIS上MIME类型中没有添加MP4的格式,添加一下即可. 解决方案: 1.在IIS上选中你的网站,然后点击右边的MIME类型, ...
- approval workflow in sharepoint designer
http://office.microsoft.com/en-us/sharepoint-designer-help/video-create-an-approval-workflow-in-shar ...
- poj 2060 Taxi Cab Scheme (最小路径覆盖)
http://poj.org/problem?id=2060 Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submi ...
- [JavaScript] js验证身份证
function checkIdCard(){ var vcity={11:"北京",12:"天津",13:"河北",14:&quo ...
- checkbox复选框样式
随着现代浏览器的流行,纯CSS设置checkbox也变的很是实用,下面会讲到5种与众不同的checkbox复选框. 首先,需要添加一段CSS隐藏所有的Checkbox复选框,下面我们会改变它的外观.要 ...
- mac下设置maven环境
在mac系统下设置maven环境. 1.首先通过终端打开 .bash_profile 2.设置maven解压后的路径地址 环境变量设置如下: MAVEN_HOME .PATH 两个变量即可 3. ...
- [转载]jquery cookie的用法
原文地址:http://www.cnblogs.com/qiantuwuliang/archive/2009/07/19/1526663.html jQuery cookie是个很好的cookie插件 ...
- leetcode4 Valid Palindrome回文数
Valid Palindrome回文数 whowhoha@outlook.com Question: Given a string, determine if it is a palindrome, ...