【DP】BZOJ1592-[Usaco2008 Feb]Making the Grade 路面修整
我活着从期中考试回来了!!!!!!!!!备考NOIP!!!!!!!!!
【题目大意】
给出n个整数a1~an,修改一个数的代价为修改前后差的绝对值,问修改成不下降序列或者不上升序列的最小总代价。
【思路】
预处理b[],为排序后的a[]。
f[i][j]表示前i个数,其中第i个数字修改为第j个大的数的最小代价。f[i][j]=min(f[i-1][k])+abs(a[i]-b[j]) (1<=k<=j)。b[]正反分别来一次。
这样是O(n^3)的,不过我们发现f[i-1][k]的最小值是可以直接保留下来的,所以最后复杂度为O(n)。
#include<bits/stdc++.h>
using namespace std;
const int INF=1e9;
const int MAXN=+;
int n,f[MAXN][MAXN],a[MAXN],b[MAXN],tmp[MAXN],premin[MAXN]; void dp()
{
memset(premin,,sizeof(premin));
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
{
f[i][j]=premin[j]+abs(a[i]-b[j]);
if (j==) premin[j]=f[i][j];else premin[j]=min(premin[j-],f[i][j]);
}
} void init()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
} void solve()
{
int ans=INF;
for (int i=;i<=n;i++) b[i]=a[i];
sort(b+,b+n+);
dp();
for (int i=;i<=n;i++) ans=min(ans,f[n][i]);
for (int i=;i<=n;i++) tmp[i]=b[i];
for (int i=;i<=n;i++) b[n-i+]=tmp[i];
dp();
for (int i=;i<=n;i++) ans=min(ans,f[n][i]);
printf("%d",ans);
} int main()
{
init();
solve();
return ;
}
忽然想到b[]中有一些数可能是重复的,所以可以离散化一下。快了一丢丢。

#include<bits/stdc++.h>
using namespace std;
const int INF=1e9;
const int MAXN=+;
int n,m,f[MAXN][MAXN],a[MAXN],b[MAXN],tmp[MAXN],premin[MAXN]; void dp()
{
memset(premin,,sizeof(premin));
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
{
f[i][j]=premin[j]+abs(a[i]-b[j]);
if (j==) premin[j]=f[i][j];else premin[j]=min(premin[j-],f[i][j]);
}
} void init()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]);
} void solve()
{
int ans=INF;
for (int i=;i<=n;i++) b[i]=a[i];
sort(b+,b+n+);
m=unique(b+,b+n+)-(b+);
dp();
for (int i=;i<=m;i++) ans=min(ans,f[n][i]);
for (int i=;i<=m;i++) tmp[i]=b[i];
for (int i=;i<=m;i++) b[n-i+]=tmp[i];
dp();
for (int i=;i<=m;i++) ans=min(ans,f[n][i]);
printf("%d",ans);
} int main()
{
init();
solve();
return ;
}
【DP】BZOJ1592-[Usaco2008 Feb]Making the Grade 路面修整的更多相关文章
- [BZOJ1592] [Usaco2008 Feb]Making the Grade 路面修整(DP)
		
传送门 有个结论,每一个位置修改高度后的数,一定是原来在这个数列中出现过的数 因为最终结果要么不递增要么不递减, 不递增的话, 如果x1 >= x2那么不用动,如果x1 < x2,把x1变 ...
 - 【贪心】bzoj1592: [Usaco2008 Feb]Making the Grade 路面修整
		
贪心的经典套路:替换思想:有点抽象 Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也 就是说,高度上升与高度下降的路段不能 ...
 - BZOJ1592: [Usaco2008 Feb]Making the Grade 路面修整
		
n<=2000个数,把它修改成不上升或不下降序列所要改变的数值总共最小是多少yy一下可得最后改成的数值肯定是原数组数值中的某一个感觉一下,相邻两个数如果有冲突要改,那肯定把他们改成两者之一的数才 ...
 - BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )
		
最优的做法最后路面的高度一定是原来某一路面的高度. dp(x, t) = min{ dp(x - 1, k) } + | H[x] - h(t) | ( 1 <= k <= t ) 表示前 ...
 - 1592: [Usaco2008 Feb]Making the Grade 路面修整
		
1592: [Usaco2008 Feb]Making the Grade 路面修整 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 428 Solv ...
 - 2014.6.14模拟赛【bzoj1592】[Usaco2008 Feb]Making the Grade 路面修整
		
Description FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了 ...
 - 【bzoj1592】[Usaco2008 Feb]Making the Grade 路面修整
		
FJ打算好好修一下农场中某条凹凸不平的土路.按奶牛们的要求,修好后的路面高度应当单调上升或单调下降,也就是说,高度上升与高度下降的路段不能同时出现在修好的路中. 整条路被分成了N段,N个整数A_1, ...
 - BZOJ1592 POJ3666 [Usaco2008 Feb]Making the Grade 路面修整 左偏树 可并堆
		
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ3666 题目传送门 - BZOJ1592 题意概括 整条路被分成了N段,N个整数A_1, ... , ...
 - 【BZOJ 1592】[Usaco2008 Feb]Making the Grade 路面修整 dp优化之转移变状态
		
我们感性可证离散(不离散没法做),于是我们就有了状态转移的思路(我们只考虑单不减另一个同理),f[i][j]到了第i块高度为j的最小话费,于是我们就可以发现f[i][j]=Min(f[i-1][k]) ...
 - bzoj 1592: [Usaco2008 Feb]Making the Grade 路面修整【dp】
		
因为是单调不降或单调不升,所以所有的bi如果都是ai中出现过的一定不会变差 以递增为例,设f[i][j]为第j段选第i大的高度,预处理出s[i][j]表示选第i大的时,前j个 a与第i大的值的差的绝对 ...
 
随机推荐
- iOS程序启动原理---iOS-Apple苹果官方文档翻译
			
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...
 - 使用infinite-scroll实现Ghost博文列表的滚动加载
			
Ghost博客系统默认提供的博文列表为传统的翻页方式(通过点击上一页.下一页等按钮来切换),随着移动客户端的发展,瀑布流式的滚动加载方式得到广泛应用,有效地提高了用户浏览信息的流畅度.下面详述如何通过 ...
 - CodeForces 990C
			
Description A bracket sequence is a string containing only characters "(" and ")" ...
 - NYOJ   141    Squares     (数学)
			
题目链接 描述 A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degre ...
 - antdVG6随记
			
g6是一个很棒的可视化工具 目前支持开发者搭建属于自己的图,图分析.图应用.图编辑器 图编辑器可以支持多种图例的创建 G6 是一个简单.易用.完备的图可视化引擎,它在高定制能力的基础上,提供了一系列设 ...
 - 图片异或(xor)getflag
			
题目地址:https://files.cnblogs.com/files/nul1/flag_enc.png.tar 这题是源于:网鼎杯minified 经过测试隧道红色最低通道异常.其余均正常.所以 ...
 - PEB及LDR链
			
PEB地址的取得在NT内核系统中fs寄存器指向TEB结构,TEB+0x30处指向PEB结构,PEB+0x0c处指向PEB_LDR_DATA结构,PEB_LDR_DATA+0x1c处存放一些指向动态链接 ...
 - 64_p8
			
python2-cotyledon-tests-1.6.7-2.fc26.noarch.rpm 12-Feb-2017 10:28 23182 python2-couchdb-1.0-6.fc26.n ...
 - Transport failed: java.io.EOFException
			
ActiveMQ服务端有时会报Transport failed: java.io.EOFException这样的错误,这是由客户端丢失连接并反复尝试连接导致的,不是什么大问题,有时网络波动就会产生这种 ...
 - Codeforces 821C  Okabe and Boxes(模拟)
			
题目大意:给你编号为1-n的箱子,放的顺序不定,有n条add指令将箱子放入栈中,有n条remove指令将箱子移除栈,移出去的顺序是从1-n的,至少需要对箱子重新排序几次. 解题思路:可以通过把栈清空表 ...