求教程,玄关
  • 板块灌水区
  • 楼主Matthew138
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/8/10 16:04
  • 上次更新2024/8/10 16:53:43
查看原帖
求教程,玄关
1140105
Matthew138楼主2024/8/10 16:04

给出一个1到n的排列,每次可以移动一个数到一个任意位置。问要达到状态1,2,3……n至少移动多少次?

输入格式

n (1<=n<=100000)

n个数

输出格式

移动次数!

样例

【样例输入】

5

2 1 4 5 3

【样例输出】

2

60分TLE了

#include<bits/stdc++.h>
using namespace std;
int n,a[100001],l,f[100001];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			if(a[j]<a[i]&&f[j]+1>f[i]){
				f[i]=f[j]+1;
			}
		}
		l=max(l,f[i]);
	}
	printf("%d",n-l-1);
	return 0;
}
2024/8/10 16:04
加载中...