洛谷P2501 bzoj1049 [HAOI2006]数字序列
题目链接
题解
第一问:
假如 \(i < j\)
如果 \(j\)能从\(i\)转移过来
显然中间空隙必须足够
例如:\(50\) \(53\) \(53\) \(52\)
就不能留下\(50\) 和 \(52\)
那么可以得到如果\(j\)能从\(i\)转移过来
满足
\(a[j]-a[i] >= j-i\)
\(=>\) \(a[j]-j >= a[i]-i\)
那么可以对于以上数列跑一边最长不下降子序列
第二问:
将原序列变为上升序列,就等于将新的序列(\(b_i = a_i-i\))变成不下降序列
那么对于最长不下降子序列相邻两点 \(c_{i-1},c_i\)
显然\(b\)序列上, 在这两点之间的点不会存在 \(c_{i-1}<=x<=c_i\)
可以证明,存在一个\(k\)点, 使得 在\(c_{i-1}\)和\(k\)点之间的点变成\(c_{i-1}\),剩下的点变成\(c_i\)时
代价最小
枚举\(k\),算出最小值即可
注意最长不下降子序列不只有一种,需要对于每一种都做一次
Code
#include<bits/stdc++.h>
#define MAX 35010
using namespace std;
inline int read() {
register int x=0,t=1;
register char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-'){t=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*t;
}
struct Line {
int v,next;
}e[MAX<<2];
int h[MAX],cnt=1,n,H[MAX],Q[MAX],len;
inline void Add(int u,int v) {
e[cnt]=(Line){v,h[u]};
h[u]=cnt++;
}
int f[MAX];
long long g[MAX],sum1[MAX],sum2[MAX];
int main()
{
n=read();
for(int i=1;i<=n;++i)H[i]=read()-i;
H[++n]=1<<30;
for(int i=1;i<=n;++i) {
int l=1,r=len,ans=0;
while(l<=r) {
int mid=(l+r)>>1;
if(Q[mid]>H[i])r=mid-1,ans=mid;
else l=mid+1;
}
if(!ans)ans=++len;
Q[f[i]=ans]=H[i];
}
printf("%d\n",n-len);
for(int i=n;i>=0;--i)
g[i]=1e18,Add(f[i],i);
g[0]=0;H[0]=-H[n];
for(int i=1;i<=n;++i) {
for(int E=h[f[i]-1];E;E=e[E].next) {
int v=e[E].v;
if(v>i)break;
if(H[v]>H[i])continue;
for(int j=v;j<=i;++j) {
sum1[j]=sum1[j-1]+abs(H[j]-H[v]);
sum2[j]=sum2[j-1]+abs(H[i]-H[j]);
}
for(int j=v;j<i;++j)
g[i]=min(g[i],g[v]+sum1[j]-sum1[v]+sum2[i]-sum2[j]);
}
}
printf("%lld\n",g[n]);
return 0;
}
洛谷P2501 bzoj1049 [HAOI2006]数字序列的更多相关文章
- 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]
题目传送门 数字序列 题目描述 给定一个整数序列 a1,a2,⋅⋅⋅,an ,求出一个递增序列 b1<b2<⋅⋅⋅<bn ,使得序列 ai 和 bi 的各项之差的绝对 ...
- 【BZOJ1049】【Luogu P2501】 [HAOI2006]数字序列 DP,结论,LIS
很有(\(bu\))质(\(hui\))量(\(xie\))的一个题目. 第一问:求最少改变几个数能把一个随机序列变成单调上升序列. \(Solution:\)似乎是一个结论?如果两个数\(A_i\) ...
- BZOJ1049 [HAOI2006]数字序列0
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- BZOJ1049:[HAOI2006]数字序列(DP)
Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列. 但是不希望改变过多的数,也不希望改变的幅度太大. Input 第一行包含一个 ...
- 洛谷P4331 [BOI2004]Sequence 数字序列(左偏树)
传送门 感觉……不是很看得懂题解在说什么? 我们先把原数列$a_i-=i$,那么本来要求递增序列,现在只需要求一个非严格递增的就行了(可以看做最后每个$b_i+=i$,那么非严格递增会变为递增) 如果 ...
- 洛谷$P4331\ [BOI2004]\ Sequence$ 数字序列 左偏树
正解:左偏树 解题报告: 传送门$QwQ$ 开始看到的时候$jio$得长得很像之前做的一个$dp$,,, 但是$dp$那题是说不严格这里是严格? 不难想到我们可以让$a_{i},b_{i}$同时减去$ ...
- BZOJ1049: [HAOI2006]数字序列
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题解: ydc的题解:http://pan.baidu.com/share/link?u ...
- 【BZOJ1049】 [HAOI2006]数字序列
BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...
- 洛谷 P2501 [HAOI2006]数字序列 解题报告
P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...
随机推荐
- php 5.3 以上fpm安装
安装PHP #wget http://cn2.php.net/get/php-5.3.8.tar.gz/from/cn.php.net/mirror #tar -zxvf php-5.3.8.tar. ...
- 数据预处理:PCA,SVD,whitening,normalization
数据预处理是为了让算法有更好的表现,whitening.PCA.SVD都是预处理的方式: whitening的目标是让特征向量中的特征之间不相关,PCA的目标是降低特征向量的维度,SVD的目标是提高稀 ...
- Unity ios、android、pc一键打包(一)
http://www.cnblogs.com/miaoshujiang/p/5289223.html http://blog.csdn.net/ynnmnm/article/details/36774 ...
- 如何从Win7上卸载Sql 2008 R2 Express,再重装
这两天,因工作需要,需要在一台新的机器上,Win7 64位英文操作系统上,安装Sql Server 2008 R2 Express,安装的过程中出现些问题,在查找问题的过程中,考虑重装 Sql Ser ...
- 多重if else和switch case的区别
int main(void) { int id; scanf_s("%d",&id); switch(id) { case 2: printf("John\n&q ...
- selenium使用ChromeDriver
什么是ChromeDriver? ChromeDriver是Chromium team开发维护的,它是实现WebDriver有线协议的一个单独的服务.ChromeDriver通过chrome的自动代理 ...
- myeclipse自动化提示
jsp自动提示:1.快捷键提示代码 window-->Preferences的General-->Keys下修改Content Assist的快捷键为Alt+/,这样就可以通过快捷键得到提 ...
- .NET Core 1.0正式发布
Major .NET Core components: Base Class Libraries CoreCLR runtime and RyuJIT compiler Roslyn compiler ...
- Android Studio2.3更换默认的ConstraintLayout布局
1.在as安装目录\plugins\Android\lib\templates\activities\common\root\res\layout下,找到simple.xml.ftl文件 2.用以下布 ...
- 【转】android中如何实现离线缓存
原文地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1209/2136.html 离线缓存就是在网络畅通的情况下将从服务器收 ...