洛谷 P1091 合唱队形
来源:互联网 发布:linux 下载速度很慢 编辑:程序博客网 时间:2024/06/05 06:19
洛谷 P1091 合唱队形
题目
题目描述
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包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
输入输出样例
输入样例#1:
8186 186 150 200 160 130 197 220
输出样例#1:
4
说明
对于50%的数据,保证有n<=20;
对于全部的数据,保证有n<=100。
题解
最长升+最长降
代码
#include <iostream>#include <cstring>#include <cmath>using namespace std;int n,i,j,a[1005],up[1005],down[1005],ans;int main(){ scanf("%d",&n); memset(up,0,sizeof(up)); memset(down,0,sizeof(down)); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n;up[i]=ans+1,i++) for(ans=0,j=0;j<i;j++) if(a[j]<a[i]) ans=max(ans,up[j]); for(i=n-1;i>=0;down[i]=ans+1,i--) for(ans=0,j=n-1;j>i;j--) if(a[j]<a[i]) ans=max(ans,down[j]); for(i=0,ans=0;i<n;i++) ans=max(ans,up[i]+down[i]); printf("%d",n-(ans-1)); return 0;}
阅读全文
0 0
- 洛谷 P1091 合唱队形
- 洛谷 P1091 合唱队形
- 洛谷 P1091 合唱队形
- 洛谷 P1091 合唱队形
- 洛谷P1091 合唱队形
- 洛谷P1091合唱队形
- 洛谷 P1091 合唱队形
- 【DP】洛谷 P1091 合唱队形
- 洛谷 P1091 合唱队形 kevin_xcw
- P1091 合唱队形
- P1091 合唱队形
- [P1091]合唱队形
- P1091 合唱队形
- P1091 合唱队形题解NOIP2004
- 洛谷 P1091 NOIP 2004 合唱队形(动态规划)
- 合唱队形-洛谷 1091
- 洛谷 1091 合唱队形
- 洛谷p1092合唱队形
- 进程死锁
- java中token
- Linux 目录配置标准:FHS
- 【精通hibernate】(4)hibernate事务管理以及并发问题处理
- Codeforces 712D Memory And Scores 前缀和+DP
- 洛谷 P1091 合唱队形
- error C2143: syntax error : missing ';' before
- Houdini学习 —— 基于节点的过程化建模初探及思考
- Scala基础
- 数据库学习中使用的表
- 算法第4版(Java语言描述)课后习题答案
- Android问题集锦之五十二:unsupported reloc 43
- 判断组成回文的字符串序列
- vim键盘操作(中班)