1269: 【例】【基础】合唱队形求解

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:12 解决:3

题目描述

位同学站成一排,音乐老师要请其中的 lns="http://www.w3.org/1998/Math/MathML">(N−K) 位同学出列,使得剩下的 lns="http://www.w3.org/1998/Math/MathML">K 位同学不交换位置就能排成合唱队形。

合唱队形是指这样的一种队形:设 lns="http://www.w3.org/1998/Math/MathML">K 位同学从左到右依次编号为 lns="http://www.w3.org/1998/Math/MathML">1,2,…,K,他们的身高分别为 lns="http://www.w3.org/1998/Math/MathML">T1,T2,…,TK,则他们的身高满足 lns="http://www.w3.org/1998/Math/MathML">T1<T2<⋯<Ti>Tlns="http://www.w3.org/1998/Math/MathML">i+1 lns="http://www.w3.org/1998/Math/MathML">>⋯>TK (lns="http://www.w3.org/1998/Math/MathML">1≤i≤K)。

你的任务是,已知所有 lns="http://www.w3.org/1998/Math/MathML">N 位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入

输入的第一行是一个整数 lns="http://www.w3.org/1998/Math/MathML">N(lns="http://www.w3.org/1998/Math/MathML">2≤N≤100),表示同学的总数。

第二行有 lns="http://www.w3.org/1998/Math/MathML">N 个整数,用空格分隔,第 lns="http://www.w3.org/1998/Math/MathML">i 个整数 lns="http://www.w3.org/1998/Math/MathML">Ti(lns="http://www.w3.org/1998/Math/MathML">130≤Ti≤230)是第 lns="http://www.w3.org/1998/Math/MathML">i 位同学的身高(厘米)。



输出

输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。

样例输入 复制

8
186 186 150 200 160 130 197 220

样例输出 复制

4

提示

#include<bits/stdc++.h>
using namespace std;
int a[110],dpa[110],dpb[110],n,i,j,ans;
int main(){
    cin>>n;
    for(i = 1;i <= n;i++){
    	cin>>a[i];
	}
	for(i = 1;i <= n;i++){
		dpa[i]=1;
		for(j = i-1;j >= 1;j--){
			if (a[i] > a[j]) {
				dpa[i]=max(dpa[i],dpa[j]+1);
			}
		}
	}
	for(i = n;i >= 1;i--){
		dpb[i]=1;
		for(j = n;j > i;j--){
			if (a[j] < a[i]) {
				dpb[i]=max(dpb[i],dpb[j]+1);
			}
		}
	}
    for(i = 1;i <= n;i++){
    	ans=max(ans,dpa[i]+dpb[i]-1);
	}
	cout<<n-ans;
	return 0;
}