合唱队形
来源:互联网 发布:js 精度丢失 知乎 编辑:程序博客网 时间:2024/04/29 23:10
Problem Description
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1≤i≤K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
Input
输入的第一行为T,表示测试数据的组数。对于每组测试数据的第一行是一个整数N(2 ≤ N ≤ 100),表示同学的总数。第二行有n个整数,用空格分隔,第i个整数Ti(130 ≤ Ti ≤ 230)是第i位同学的身高(厘米)。
Output
对于每组测试数据,输出一行只包含一个整数,就是最少需要几位同学出列。
Sample Input
18186 186 150 200 160 130 197 220
Sample Output
4
/* 解题报告: 简单DP,从前往后求最长上升子序列,在从后面求最长上升子序列,求对应和的最大值就是K;
则N-K就是所求的值。
*/
//标程:
#include<stdio.h>#include<string.h>int dp1[110],dp2[110],a[110];int main(){ //freopen("a.txt","r",stdin); int n,t,i,j; scanf("%d",&t); while(t--) { memset(dp1,0,sizeof(dp1)); memset(dp2,0,sizeof(dp2)); scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",a+i); for(i=0;i<n;i++) for(j=0;j<i;j++) if(a[i]>a[j] && dp1[i]<dp1[j]+1) dp1[i]=dp1[j]+1; for(i=n-1;i>=0;i--) for(j=n-1;j>i;j--) if(a[i]>a[j] && dp2[i]<dp2[j]+1) dp2[i]=dp2[j]+1; int ans=0,maxn=0; for(i=0;i<n;i++) { ans=dp1[i]+dp2[i]; if(maxn<ans) maxn=ans; } printf("%d\n",n-maxn-1); } return 0;}
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 合唱队形
- 疯狂Java练习题 将浮点数转换成人民币读法字符串
- SCOTT/TIGER demonstration schema (demobld.sql)
- SAP HR(一、模块基础概念介绍)
- 通过事件启动另外一个Activity
- android实现程序后台运行
- 合唱队形
- Move cards
- 显示、更改供应商账户组
- 前四周开发杂谈
- wertc在vs2010下build出错
- 将企业协作与微信结合,明道打通微信实现从微信到明道的消息分享,目前已支持文字、图片以及链接
- 求最大公约数的两种方法
- 卡卡游戏引擎之快速入门
- 输出旋转数组的最小值