码迷,mamicode.com
首页 > 其他好文 > 详细

[CF269B] Greenhouse Effect - dp

时间:2020-02-08 09:17:13      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:names   using   code   cout   长度   int   一个   max   double   

给出 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;
}

[CF269B] Greenhouse Effect - dp

标签:names   using   code   cout   长度   int   一个   max   double   

原文地址:https://www.cnblogs.com/mollnn/p/12275483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!