栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【最优方案】合唱队形

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【最优方案】合唱队形

1126. 合唱队形
(File IO): input:chorus.in output:chorus.out

时间限制: 1000 ms  空间限制: 262144 KB  具体限制  

Goto ProblemSet

题目描述

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

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

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

输入

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

输出

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

样例输入

8
186 186 150 200 160 130 197 220


样例输出

4
 

思路:

求最长上升序列fi,找最长下降子序列gi,相加变成ti;再循环一遍,找最大ti,输出结果(动态规划)

代码:
#include
using namespace std;
int n,a[105],f[105],g[105];
int main(){
	cin>>n;
	for (int i=1; i<=n; i++) cin>>a[i];
	fill(f,f+N,1);
	fill(g,g+N,1);
	for (int i=2; i<=n; i++)
		for (int j=1; ji; j--)
			if (a[j]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856270.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号