本题目标序列是不下降序列,任意交换两个元素
那么用总长度减去最长不上升子序列
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1000+10];
int f[1000+10];
int ma=-0x3f3f3f3f;
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),f[i]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i-1;j++){
if(a[j]<a[i]){
f[i]=max(f[i],f[j]+1);
}
}
}
for(int i=1;i<=n;i++){
ma=max(ma,f[i]);
}
cout<<ma<<endl;
return 0;
}
为什么不可以
