cf 605A Sorting Railway Cars 贪心 简单题

其实就是求总长度 - 一个最长“连续”自序列的长度

最长“连续”自序列即一个最长的lis,并且这个lis的值刚好是连续的,比如4,5,6...

遍历一遍,贪心就是了

遍历到第i个时,此时值为a[i],如果a[i]-1在前面已经出现过了,则len[a[i]] = len[a[i-1]]+1

否则len[a[i]] = 1

 

 

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>

using namespace std;

const int MAXN = 100000+10;

bool pos[MAXN];
int len[MAXN];

void solve()
{
    int n;
    scanf("%d",&n);
    memset(pos,false,sizeof pos);
    for(int i=1;i<=n;i++){
        int a;
        scanf("%d",&a);
        if(pos[a - 1]){
            len[a] = len[a-1] + 1;
        }
        else{
            len[a] = 1;
        }
        pos[a] = true;
    }

    int ma = -1;
    for(int i=1;i<=n;i++){
        if(len[i] > ma)
            ma = len[i];
    }

    printf("%d\n",n - ma);
    return ;
}

int main()
{
    solve();
    return 0;
}

 

posted on 2015-12-10 23:46  _fukua  阅读(261)  评论(0编辑  收藏  举报