51nod 1294 修改数组 dp
来源:互联网 发布:win7红警点网络进不去 编辑:程序博客网 时间:2024/06/04 08:47
题意
给出一个整数数组A,你可以将任何一个数修改为任意一个正整数,最终使得整个数组是严格递增的且均为正整数。问最少需要修改几个数?
n<=100000,0<=a[i]<=10^9
分析
我们可以注意到A[i]最小的值是i,我们设B[i]=A[i]-i,那么如果B[i]<0则位置i一定要修改。对于其余的位置,我们就对B求一次最长不下降序列,那么这些数就是可以保留的,其余则要修改。至于正确性的话,感受一下即可。
代码
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;const int N=100005;int n,a[N],f[N],g[N],vis[N];int main(){ scanf("%d",&n); for (int i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]-=i; if (a[i]<0) vis[i]=1; } int mx=0; for (int i=1;i<=n;i++) { if (vis[i]) continue; f[i]=upper_bound(g+1,g+mx+1,a[i])-g; if (f[i]>mx) mx=f[i],g[mx]=a[i]; else g[f[i]]=min(g[f[i]],a[i]); } printf("%d",n-mx); return 0;}
阅读全文
0 0
- 51nod 1294 修改数组 dp
- 51nod 1294 修改数组
- 51Nod-1294-修改数组
- 【51Nod 1294】修改数组
- 【51 nod 1294】 修改数组
- [51nod 1294]修改数组
- 51nod 1294 修改数组(dp,逆向思维,最大上升子序列)
- 51NOD 1294 修改数组 【LIS】
- 51nod 1294 :修改数组 && HDU 5256:序列变换
- 51nod 1294 修改数组 (LIS变形_DP)
- 51 nod 1732 51nod婚姻介绍所(后缀数组||DP)
- 51Nod 编辑距离 DP+滚动数组
- 51Nod 1084 DP+滚动数组
- 51nod 1270 数组的最大代价(DP)
- 51nod 循环数组最大子段和 (dp)
- 51nod 1050 循环数组最大子段和 dp
- 51nod 1270 数组的最大代价 dp
- 【51Nod】1270 - 数组的最大代价(dp)
- STL——概述
- CDQZ Challenge 21
- opencv3 for python 之 创建图片绘制简单几何图形
- java项目中,关于svn上同步了setting文件 导致本地文件夹错乱的问题的解决
- FPGA时序约束中set_false_path的使用
- 51nod 1294 修改数组 dp
- 百度之星初赛(B)--度度熊的交易计划----最小费用最大流
- CF457A:Golden System(数论 & 进制)
- 操作数
- 4 Sum leetcode java
- 务实java基础之IO
- ssm框架
- 邮票面值设计
- Android GridView属性集合