P1091 [NOIP2004 提高组] 合唱队形

题目描述

N位同学站成一排,音乐老师要请其中的(N − K)位同学出列,使得剩下的KK位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<...Ti+1>…>TK(1 ≤ i ≤ K)

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

共二行。

第一行是一个整数N(2≤N≤100),表示同学的总数。

第二行有n个整数,用空格分隔,第i个整数Ti​(130≤Ti​≤230)是第ii位同学的身高(厘米)。

输出格式

一个整数,最少需要几位同学出列。

输入输出样例


#include 

using namespace std;

int n;
int a[101], p[101], d[101];

int main(){
	int ans = 0;
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        p[i] = 1;
		d[i] = 1;
    }
    for(int i = 2; i <= n; i++){
        int l = 0;
        for(int j = 1; j <= i - 1; j++){
            if(a[j] < a[i] && p[j] > l){
                l = p[j];
            }
        }
        p[i] = l + 1;
    }
    for(int i = n - 1; i >= 1; i--){
        int l = 0;
        for(int j = i + 1; j <= n; j++){
        	if(a[i] > a[j] && d[j] > l){
         		l = d[j];
        	}
    	}
        d[i] = l + 1;
	}
    for(int i = 1; i <= n; i++){
    	if(p[i] + d[i] > ans){
			ans = p[i] + d[i];
		}
    }
    cout << n - (ans - 1);
    return 0;
}

 

你可能感兴趣的:(洛谷,C++)