给出 N 个植物,每个植物都属于一个品种,共计 m 个品种,分落在不同的位置上(在一个数轴上,而且数轴是无限长度的),保证读入的位置是按照升序读入的。
现在我们可以进行一个操作:取任意一个位置上的植物,移动到任意一个没有植物的位子上去。
问我们最少进行多少次操作,能够使得从左到右,是按照品种升序排列的(1 ~ m)(单调不降),而且每种植物都相邻。
Solution
求一下最长非严格上升子序列即可
#include <bits/stdc++.h>
using namespace std;
int n,m,a[5005],f[5005];
double t;
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) {
cin>>a[i]>>t;
}
int ans=0;
for(int i=1;i<=n;i++) {
f[i]=1;
for(int j=1;j<i;j++) {
if(a[j]<=a[i]) f[i]=max(f[i], f[j]+1);
}
ans=max(ans,f[i]);
}
cout<<n-ans;
}