题目链接

bzoj

洛谷

题解

第一问:

假如 \(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]数字序列的更多相关文章

  1. 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]

    题目传送门 数字序列 题目描述 给定一个整数序列 a1​,a2​,⋅⋅⋅,an​ ,求出一个递增序列 b1​<b2​<⋅⋅⋅<bn​ ,使得序列 ai​ 和 bi​ 的各项之差的绝对 ...

  2. 【BZOJ1049】【Luogu P2501】 [HAOI2006]数字序列 DP,结论,LIS

    很有(\(bu\))质(\(hui\))量(\(xie\))的一个题目. 第一问:求最少改变几个数能把一个随机序列变成单调上升序列. \(Solution:\)似乎是一个结论?如果两个数\(A_i\) ...

  3. BZOJ1049 [HAOI2006]数字序列0

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  4. BZOJ1049:[HAOI2006]数字序列(DP)

    Description 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列. 但是不希望改变过多的数,也不希望改变的幅度太大. Input 第一行包含一个 ...

  5. 洛谷P4331 [BOI2004]Sequence 数字序列(左偏树)

    传送门 感觉……不是很看得懂题解在说什么? 我们先把原数列$a_i-=i$,那么本来要求递增序列,现在只需要求一个非严格递增的就行了(可以看做最后每个$b_i+=i$,那么非严格递增会变为递增) 如果 ...

  6. 洛谷$P4331\ [BOI2004]\ Sequence$ 数字序列 左偏树

    正解:左偏树 解题报告: 传送门$QwQ$ 开始看到的时候$jio$得长得很像之前做的一个$dp$,,, 但是$dp$那题是说不严格这里是严格? 不难想到我们可以让$a_{i},b_{i}$同时减去$ ...

  7. BZOJ1049: [HAOI2006]数字序列

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1049 题解: ydc的题解:http://pan.baidu.com/share/link?u ...

  8. 【BZOJ1049】 [HAOI2006]数字序列

    BZOJ1049 [HAOI2006]数字序列 dp好题? 第一问 第一问我会做!令\(b_i=a_i-i\),求一个最长不下降子序列. \(n-ans\)就是最终的答案. 第二问 好难啊.不会.挖坑 ...

  9. 洛谷 P2501 [HAOI2006]数字序列 解题报告

    P2501 [HAOI2006]数字序列 题目描述 现在我们有一个长度为n的整数序列A.但是它太不好看了,于是我们希望把它变成一个单调严格上升的序列.但是不希望改变过多的数,也不希望改变的幅度太大. ...

随机推荐

  1. 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. ...

  2. 数据预处理:PCA,SVD,whitening,normalization

    数据预处理是为了让算法有更好的表现,whitening.PCA.SVD都是预处理的方式: whitening的目标是让特征向量中的特征之间不相关,PCA的目标是降低特征向量的维度,SVD的目标是提高稀 ...

  3. Unity ios、android、pc一键打包(一)

    http://www.cnblogs.com/miaoshujiang/p/5289223.html http://blog.csdn.net/ynnmnm/article/details/36774 ...

  4. 如何从Win7上卸载Sql 2008 R2 Express,再重装

    这两天,因工作需要,需要在一台新的机器上,Win7 64位英文操作系统上,安装Sql Server 2008 R2 Express,安装的过程中出现些问题,在查找问题的过程中,考虑重装 Sql Ser ...

  5. 多重if else和switch case的区别

    int main(void) { int id; scanf_s("%d",&id); switch(id) { case 2: printf("John\n&q ...

  6. selenium使用ChromeDriver

    什么是ChromeDriver? ChromeDriver是Chromium team开发维护的,它是实现WebDriver有线协议的一个单独的服务.ChromeDriver通过chrome的自动代理 ...

  7. myeclipse自动化提示

    jsp自动提示:1.快捷键提示代码 window-->Preferences的General-->Keys下修改Content Assist的快捷键为Alt+/,这样就可以通过快捷键得到提 ...

  8. .NET Core 1.0正式发布

    Major .NET Core components: Base Class Libraries CoreCLR runtime and RyuJIT compiler Roslyn compiler ...

  9. Android Studio2.3更换默认的ConstraintLayout布局

    1.在as安装目录\plugins\Android\lib\templates\activities\common\root\res\layout下,找到simple.xml.ftl文件 2.用以下布 ...

  10. 【转】android中如何实现离线缓存

    原文地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1209/2136.html 离线缓存就是在网络畅通的情况下将从服务器收 ...