记录编号 |
321761 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
[USACO Feb08] 麻烦的聚餐 |
最终得分 |
100 |
用户昵称 |
Go灬Fire |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2016-10-13 21:32:11 |
内存使用 |
0.65 MiB |
显示代码纯文本
/*
Name: 麻烦的聚餐
Copyright:
From:http://cogs.pro/cogs/problem/problem.php?pid=139
Author: Go灬Fire
Date: 13/10/16 21:31
Description: 找最长不上升子序列与最长不下降子序列中长度较大的一个,
用序列总长-它既是答案
不能用循环,由于x只可能是1 2 3 ,记录last[]数组,防T掉
*/
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<iostream>
#define Begin freopen("egroup.in","r",stdin);freopen("egroup.out","w",stdout);
#define End fclose(stdin);fclose(stdout);
using namespace std;
const int maxn=35000;
int n,f[maxn],rf[maxn],last[maxn];
void Init();
int main(){
Begin;
Init();
//system("pause");
End;
return 0;
}
void Init(){
scanf("%d",&n);
int ans=0;
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);
for(int j=1;j<=x;j++){
if(f[i]<f[last[j]]+1)f[i]=f[last[j]]+1;
}
for(int j=x;j<=3;j++){
if(rf[i]<rf[last[j]]+1)rf[i]=rf[last[j]]+1;
}
ans=max(ans,max(f[i],rf[i]));
last[x]=i;
}
printf("%d\n",n-ans);
}