序列变换(HDU-5256)【LIS】
2024-10-06 07:46:35
题目链接:https://vjudge.net/problem/HDU-5256
题意:给一个数列,每一个数都不相同且为整数,现求,最少需要修改多少次才能使该数列为严格上升的。
思路:首先,对于一个严格上升的整数数列a,一定有a[i]>=a[i-1]+1,所以,a[i]-i>=a[i-1]-(i-1),以此为线索,我们生成一个新数列b[i]=a[i]-i,则b[i]>=b[i-1],换句话说,a数列严格递增,等价于b数列不下降,因此,n-b的最长上升子序列长度即为最小修改次数。
代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int max_v=;
const int INF=;
int dp[max_v],n,a[max_v]; int solve(){
memset(dp,0x3f,sizeof(dp));
for(int i=;i<n;i++)
*upper_bound(dp,dp+n,a[i])=a[i];
return (lower_bound(dp,dp+n,0x3f3f3f)-dp);
}
int main(){
int t;
scanf("%d",&t);
for(int i=;i<=t;i++){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i-]);
a[i-]=a[i-]-i+;
}
printf("Case #%d:\n%d\n",i,n-solve());
}
return ;
}
最新文章
- centos中yum安装mysql路径
- JAVA 1.4 算术运算
- Socket通信代码(原理)
- eclipse插件 代码提示和着色
- input autocomplete 下拉提示+支持中文
- Installshield脚本拷贝文件常见问题汇总
- Visual Studio Live Share不完全指北
- sqlserver 发送http请求
- 在保存Bitmap的时候出现“GDI出现一般性错误”
- Windows核心编程:第7章 线程调度、优先级和关联性
- 开发认为不是bug,你该如何处理?
- 将数组划分成连续子序列 Split Array into Consecutive Subsequences
- WebClient类
- JS 操作 file标签只上传照片
- Promise/Deferred
- Android实现仿qq侧边栏效果
- GO1.6语言学习笔记2-安装配置及代码组织
- Linux修改Oracle用戶
- BZOJ4584 &; 洛谷3643 &; UOJ204:[APIO2016]划艇——题解
- 【Java】qatools.properties