【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大的值的差的绝对 ...
随机推荐
- 第5堂音频课:发音&词串&自学方法示范
1. 发音怎么练习 我讲解的第5-6节发音课,就像一个有用教练,教你的划水姿势,你学了以后,在床上趴着练练蹬腿,然后,要立刻跳下水去游泳,也就是说,你要去听英语: 请你听一段可可宝贝APP的绘本故事, ...
- 服务器部署之nginx的配置
nginx可作为Web和 反向代理 服务器,在高连接并发的情况下,Nginx是Apache服务器不错的替代品.下面记录一下自己对nginx的配置和使用. nginx的安装 环境:oracle-linu ...
- 45.Jump Game II---贪心---2018大疆笔试题
题目链接 题目大意:与55题类似,只是这里要求出跳数. 法一(借鉴):贪心.cur表示当前能到达的最远距离,pre表示上一次能到达的最远距离,每到一个位置更新一次最远距离cur,如果当前位置超过了上一 ...
- Python多态、鸭子类型
一.多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.ab ...
- caffe Python API 之Inference
#以SSD的检测测试为例 def detetion(image_dir,weight,deploy,resolution=300): caffe.set_mode_gpu() net = caffe. ...
- 使用extjs做的一个简单grid
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- 20165301 2017-2018-2 《Java程序设计》第八周学习总结
20165301 2017-2018-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十二章:Java多线程机制 进程与线程 操作系统与进程:进程是程序的一次动态执行过程. 进 ...
- java IntelliJ IDEA 13 注册码 IDEA序列号 License Key
java IntelliJ IDEA 13 注册码 IDEA序列号 License Key Username: JavaDeveloper@sskaje.me License: 282971-M1NW ...
- webStorage,离线缓存
一.webStorage 1.目标 1.了解cookie的不足之处,引入webstorage的概念 2.学习并且掌握webstorage有哪两种 3.学习并且掌握sessionStorag ...
- elk搭建实战
1 安装elasticsearch 1.1安装elasticsearch 相关中文文档:https://es.xiaoleilu.com 下载:从https://www.elastic.co/down ...