[CF269B] Greenhouse Effect

给出 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;
}
原文地址:https://www.cnblogs.com/mollnn/p/12275483.html