合唱队形(洛谷-P1091)
题目描述
N 位同学站成一排,音乐老师要请其中的( N−K )位同学出列,使得剩下的 KK 位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为 1,2,…,K ,他们的身高分别为 T1,T2,…,TK , 则他们的身高满足 T1<...<Ti>Ti+1>…>TK(1≤i≤K) 。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
输入输出格式
输入格式:
共二行。
第一行是一个整数 N(2≤N≤100) ,表示同学的总数。
第二行有 n 个整数,用空格分隔,第 i 个整数 Ti(130≤Ti≤230) 是第 i 位同学的身高(厘米)。
输出格式:
一个整数,最少需要几位同学出列。
输入输出样例
输入样例#1:
8
186 186 150 200 160 130 197 220输出样例#1:
4
源代码
#include<iostream>
using namespace std;int cmp(int x,int y)
{if(x>y) return x;else return y;
}
int dp_rise[10000],dp_fall[10000];
int main()
{int n,high[10000];int rise_temp,fall_temp,temp;int max=1;//留下人数int i,j;cin>>n;//人数for(i=1;i<=n;i++) {cin>>high[i];//每人身高dp_rise[i]=1;//无论是降序还是升序,留下的人数至少为1dp_fall[i]=1;//无论是降序还是升序,留下的人数至少为1}/*比较升序时取i位置和不取i位置哪个留下的人多 */for(i=1;i<=n;i++)//求以第i个数为终点的最长上升子序列长度{rise_temp=0;//记录第i 个数左边子序列最大长度for(j=1;j<i;j++)//搜索以第i 个数左边数为终点的最长上升子序列长度{if(high[i]>high[j])//若i位置大于j位置,则为上升序列{if(rise_temp<dp_rise[j])//若左端上升长度小于j位置 rise_temp=dp_rise[j];//令第i 个数左边子序列最大长度为j位置}}dp_rise[i]=rise_temp+1;//比较得来留下人最多的方案}/*比较降序时取i位置和不取i位置哪个留下的人多 */for(i=n;i>=1;i--)//求以第i个数为终点的最长上升子序列长度{fall_temp=0;//记录第i 个数右边子序列最大长度for(j=n;j>i;j--)//搜索以第i 个数右边数为终点的最长下降子序列长度{if(high[i]>high[j])//若i位置大于j位置,则为下降序列{if(fall_temp<dp_fall[j])//若右端下降长度小于j位置 fall_temp=dp_fall[j];//令第i 个数右边子序列最大长度为j位置}}dp_fall[i]=fall_temp+1;//比较得来留下人最多的方案}for(i=1;i<=n;i++)//比较何种情况时留下人数最多{temp=dp_rise[i]+dp_fall[i]-1;max=cmp(max,temp);}cout<<n-max<<endl;//出列人数=总人数-留下人数return 0;
}
合唱队形(洛谷-P1091)相关推荐
- 洛谷P1091 合唱队形
洛谷P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K他 ...
- 洛谷 P1091 合唱队形
题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的身高分别为T1,T2, ...
- 洛谷 P1091 合唱队型
很容易想到维护一个最长上升子序列和一个最长下降子序列.然后枚举一个点k,取所有以k结尾的最长上升子序列和以k开头的最长下降子序列的长度的和中最大的,表示留下的人数.再用总人数减去这个,等于出队人数 另 ...
- 【动态规划刷题笔记】线性dp:合唱队形(最长递增子序列的变体)
[NOIP2004 提高组] 合唱队形 - 洛谷 思路:最少出列,即挑出最多,即找最长递增子序列和最长递减子序列 设dp1[i]为以h[i]结尾的最长递增子序列 dp2[i]为以h[i]开头的最长递减 ...
- 洛谷--橙色百道DP总结
最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...
- 洛谷1091合唱队形
题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高分别为T1,T ...
- P1091 合唱队形[单调性+DP]
题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高 ...
- P1091 合唱队形
P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的 ...
- P1091 [NOIP2004 提高组] 合唱队形(动态规划+LIS)
P1091 [NOIP2004 提高组] 合唱队形 Part1:链接: 点我就送屠龙宝刀[doge] Part2:题目 Part3:思路 隔了这么久,屑人再次捡起了他的节操,洗了洗,然后开始续写他的苦 ...
最新文章
- 终于有篇看的懂的 B 树文章了!
- pom.xml中的artifactId是什么意思?
- 别小看不起眼的电阻,里面大有学问!
- 测试linux nginx,linux系统肿么检测安装了nginx
- php投票系统中各个文件的作用说明,PHP开发简单投票系统之投票页面功能模块(二)...
- Citrix XenDesktop中VDA无法注册到DDC案例分享(一)
- 【Git】Git如何在不提交当前分支的情况下切换到其它分支进行操作-git stash
- Golang遇到的一些问题总结
- 微信⼩程序——wxParse使⽤⽅法
- python关键词排名批量查排名_Python批量查询百度排名
- python兼职能挣多少钱-副业赚钱干货【4】Python程序员变现之路
- 解决本地笔记导入博客中图片无法显示的问题
- 优锘科技:森数据初体验
- BZOJ2794 Cloakroom【有限制的背包问题】
- XML 格式化转字符串
- 关于react-router-dom 6.0.1的基础写法 解决Error A <Route> is only ever to be used as the child of <Routes>
- Java中的上界与下界(? extends/super T)
- 观点 | 电动汽车变革进行时,芯片IP供应商扮演着怎样的角色?
- python编程midi键盘按键错乱_电脑键盘按键错乱怎么回事 电脑键盘按键错乱原因【图文】...
- 华为消费者业务公布2017上半年智能手机收入暴涨