当前位置:首页 > 题解目录 > 正文内容

【题解】合唱队形

亿万年的星光1年前 (2023-06-02)题解目录714

【题目描写】

N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的KK位同学排成合唱队形。


合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<T2<…<Ti,Ti>Ti+1>…>TK(1≤i≤K)。

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


【输入描述】

输入的第一行是一个整数N(2≤N≤100),表示同学的总数。第二行有n个整数,用空格分隔,第i个整数Ti(130≤Ti≤230)是第i位同学的身高(厘米)。

【输出描述】

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

【样例输入】

8
186 186 150 200 160 130 197 220

【样例输出】

4

【题目分析】


【参考答案】

#include<bits/stdc++.h>
using namespace std;
int n,a[110],f[110][2],MAX;//f[i][1]表示上升子序列的个数,f[i][2]表示下降子序列的个数
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		int mx=0;
		for(int j=1;j<i;j++)
		{
			if(a[j]<a[i])
			{
				mx=max(mx,f[j][1]);//求上升子序列的最大值,也就是第一部分可以留下的最大人数
			}
		}
		f[i][1]=mx+1;
	}
	for(int i=n;i>=1;i--)
	{
		int mx=0;
		for(int j=n;j>i;j--)
		{
			if(a[j]<a[i])
			{
				mx=max(mx,f[j][2]);
			}
		}
		f[i][2]=mx+1;
		MAX=max(MAX,f[i][1]+f[i][2]-1);//f[i][1]+f[i][2]-1表示当a[i]最高点时留下的人数,这里减一,因为上升和下降的个数都包括了最高点,所以减去一个
	}
	cout<<n-MAX<<endl;
	return 0;
 }


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

第n小质数

【题目描述】蒜头君有一个正整数 n,他想求第 n小的质数。【输入格式】一个不超过 10000的正整数 n。【输出格式】第 n 小的质数。输出...

【题解】区间和

【描述】输入一个整数Q,进行Q次询问,每次给定两个整数l和r,每一次输出l~r中所有平方数的和 % 1000000007【输入】第一行是一个整数Q后面的Q行每行有2个数字l和r【输出】Q行,...

【题解】最大子矩阵

【题目描述】已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 × 1)子矩阵。比如,如下4 × 4的矩阵0  -2 -7&nb...

【题解】解密

【题解】解密

【题目描述】给定一个正整数k,有k次询问,每次给定三个正整数ni,ei,di,求两个正整数pi,qi。使ni=pi *  qi,  ei * di =(pi -1) *(qi-1)...

【题解】计数2的N次方

【题目描述】任意给定一个正整数N(N≤100),计算2的n次方的值。【输入描述】输入一个正整数N。【输出描述】输出2的N次方的值。【样例输入】5【样例输出】32【参考答案】#include<io...

【题解】牛的阵容

【题目描述】农民约翰雇一个专业摄影师给他的奶牛拍照。由于约翰的牛有很多品种,他喜欢他的照片包含每个品种至少一头牛。约翰的牛都站在数轴的不同地方,每一头牛由一个整数位置 X_i 以及整数品种编号 ID_...