0
点赞
收藏
分享

微信扫一扫

chrome安装vue插件 vue-devtools

灯火南山 04-01 23:00 阅读 1

1、题目链接:[NOIP2004 提高组] 合唱队形 - 洛谷

477e24dca970422f8f847e9feab4a003.png

#include <bits/stdc++.h>
using namespace std;
int n,ans;
int a[105],f[105][2];//f[i][2]中2表示正反两个方向

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	//正方向求最长上升子序列 
	a[0]=0;//初始化下标0 
	for(int i=1;i<=n;i++){
		for(int j=0;j<i;j++){
			if(a[i]>a[j]){
				f[i][0]=max(f[i][0],f[j][0]+1);
			}
		}
	}
	//反方向求最长上升子序列 
	a[n+1]=0;//初始化下标n+1 
	for(int i=n;i;i--){
		for(int j=n+1;j>i;j--){
			if(a[i]>a[j]){
				f[i][1]=max(f[i][1],f[j][1]+1);
			}
		}
	}
	for(int i=1;i<=n;i++){
		ans=max(f[i][0]+f[i][1]-1,ans);//正向加反向减去重叠的1个 
	}
	printf("%d\n",n-ans);//总数减去合法序列即为出队人数 
	return 0;
}

 

 

举报

相关推荐

0 条评论