题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1049

题意:给出一个数列A,要求:(1)修改最少的数字使得数列严格递增;(2)在(1)的基础上使得修改的绝对值之和最小。

思路:对于第一问看起来像是求最长上升子 列,其实不是。我们想,若对于i<j,j能由i转移过来,那么需满足A[j]-A[i]>=j-i才行,这样我们发现只要A[j]-j>=A[i]-i即可。因此令A[i]=A[i]-i,这样求LIS即可。对于第二问,若i<j且j由i转移过来,那么[i+1,j-1]之间 的数字或者大于A[j]或者小于A[i],最后这段区间的数字必然是前面一段修改为A[i]后面一段修改为A[j]。因此,记录每个位置j由哪些前面的位置转移过来,直接暴力枚举前面的位置i即可。然后对于[i+1,j-1],暴力枚举中间的分界点。

int a[N],b[N],c[N],n,f[N];
vector<int> V[N];
int S[N],M; int find(int x)
{
int low=1,high=M,mid;
while(low<=high)
{
mid=(low+high)>>1;
if(b[mid]==x) return mid;
if(b[mid]<x) low=mid+1;
else high=mid-1;
}
} void add(int x,int y)
{
while(x<=n) upMax(S[x],y),x+=x&-x;
} int get(int x)
{
int ans=0;
while(x) upMax(ans,S[x]),x-=x&-x;
return ans;
} int Ans; void deal1()
{
int i;
a[++n]=INF;
FOR1(i,n) b[i]=a[i];
sort(b+1,b+n+1);
M=unique(b+1,b+n+1)-(b+1);
FOR1(i,n) c[i]=find(a[i]);
Ans=0;
FOR1(i,n)
{
f[i]=get(c[i])+1;
add(c[i],f[i]);
upMax(Ans,f[i]);
}
PR(n-Ans);
} i64 sum1[N],sum2[N],dp[N]; void deal2()
{
int i,j,k,t;
V[0].pb(0);
FOR1(i,n) V[f[i]].pb(i),dp[i]=inf;
a[0]=-INF; dp[0]=0;
FOR1(i,n)
{
FOR0(j,SZ(V[f[i]-1]))
{
k=V[f[i]-1][j];
if(k>i) break;
if(a[k]>a[i]) continue;
for(t=k;t<=i;t++) sum1[t]=abs(a[t]-a[k]),sum2[t]=abs(a[t]-a[i]);
for(t=k+1;t<=i;t++) sum1[t]+=sum1[t-1],sum2[t]+=sum2[t-1];
for(t=k;t<i;t++) upMin(dp[i],dp[k]+sum1[t]+sum2[i]-sum2[t]);
}
}
PR(dp[n]);
} int main()
{
RD(n);
int i;
FOR1(i,n) RD(a[i]),a[i]-=i;
deal1(); deal2();
}

BZOJ 1049 数字序列(LIS)的更多相关文章

  1. BZOJ 1049 数字序列

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

  2. bzoj 1049: 数字序列 dp

    题目大意: 给定一个长度为n的整数序列.在改变的数最小的和改变的幅度最小的前提下把它变成一个单调严格上升的序列.求改变的最小的数和这个幅度. 题解: (貌似以前考试考过这道题) 其实这道题就是两道题拼 ...

  3. BZOJ 1046 上升序列(LIS变形)

    要保证长度为L的序列下标字典序最小,当然要尽量选前面的数. 如何判断前面的数是否满足条件?,只需要知道这个数开头的递增序列的最长长度是多少,如果不小于L,那么必然可以加入这个数.还需判断一下它是否大于 ...

  4. 【BZOJ 1049】 1049: [HAOI2006]数字序列 (LIS+动态规划)

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

  5. 【BZOJ】【1049】【HAOI2006】数字序列

    DP 第一问比较水……a[i]-=i 以后就变成最长不下降子序列问题了,第二问这个结论好神奇,考试的时候怎么破?大胆猜想,不用证明?TAT 题解:http://pan.baidu.com/share/ ...

  6. bzoj 1049 [HAOI2006]数字序列

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

  7. 2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS)

    2021.12.06 P2501 [HAOI2006]数字序列(动态规划+LIS) https://www.luogu.com.cn/problem/P2501 题意: 现在我们有一个长度为 n 的整 ...

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

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

  9. 找出数组中最长的连续数字序列(JavaScript实现)

    原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: functi ...

随机推荐

  1. java 8 学习资料

    出处: 总览 http://www.importnew.com/24300.html stream api 详解 : https://www.ibm.com/developerworks/cn/jav ...

  2. 【Python】xpath中为什么粘贴进去代码后老报错?如何在定位元素的时候准确找到定位切入点?

    1. xpath后()中双引号("")里面不能套用双引号(""),把里面的双引号改成单引号('')报错就没有了. 2.如何在定位元素的时候准确找到定位切入点? ...

  3. maven指定本地仓库

    在settings.xml文件中添加:<localRepository>E:\jihui\maven\jar</localRepository><!--指定本地仓库路径- ...

  4. [LeetCode] 197. Rising Temperature_Easy tag: SQL

    Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to ...

  5. canvas实现验证码功能

    我们在做一些后台系统登录功能的时候,一般都会用到验证码,最多的就是后台生成的验证码图片返回给前端的.也可以不调用后端接口,前端使用canvas直接生成验证码. 由于功能过于简单,不需要多少代码和文字说 ...

  6. 关于 WebBrowser调用百度地图API 鼠标滚轮缩放地图级别失灵的解决办法

    在桌面程序下 百度地图API的鼠标缩放地图功能可能会失灵无效! 这个原因不是API的问题 小弟试了下在WEB上面是没有问题的 于是考虑可能是WebBrowser的获取焦点问题,于是在主窗体 添加了一个 ...

  7. Typecho博客让文章列表页只显示摘要的方法

    在当前主题的 index.php 文件中找到代码 <?php $this->content('阅读剩余部分...'); ?> 将其替换为 <?php $this->exc ...

  8. redis windows版本下载

    https://github.com/dmajkic/redis/downloads http://windows.php.net/downloads/pecl/snaps/redis/3.1.4rc ...

  9. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

  10. Storm消息可靠处理机制

    在很多应用场景中,分布式系统的可靠性保障尤其重要.比如电商平台中,客户的购买请求需要可靠处理,不能因为节点故障等原因丢失请求:比如告警系统中,产生的核心告警必须及时完整的知会监控人员,不能因为网络故障 ...