九度1131_合唱队形【LIS】【LCS】

2024-06-15 06:08
文章标签 lis lcs 九度 1131 合唱队

本文主要是介绍九度1131_合唱队形【LIS】【LCS】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目1131:合唱队形

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:1706

解决:529

题目描述:

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。
合唱队形是指这样的一种队形:设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<stdio.h>
# include<string.h>int array[110],f_up[110],f_down[110];int main()
{int N;while(~scanf("%d",&N))	{memset(array,0,sizeof(array));memset(f_up,0,sizeof(f_up));memset(f_down,0,sizeof(f_down));for(int i = 1; i <= N; i++)scanf("%d",&array[i]);for(int i = 1; i <= N; i++){f_up[i] = 1;f_down[i] = 1;}f_up[0] = f_up[N+1] = 0;f_down[0] = f_down[N+1] = 0;for(int i = 1; i <= N; i++){for(int j = i-1; j>=1; j--){if(array[i] > array[j] && f_up[i]<f_up[j]+1)f_up[i] = f_up[j] + 1;}} for(int i = N; i >= 1; i--){for(int j = i+1; j <= N; j++){if(array[i] > array[j] && f_down[i]<f_down[j]+1)f_down[i] = f_down[j] + 1;}}int ans = 0;for(int i = 1; i <= N; i++){if(ans < f_up[i]+f_down[i]-1)ans = f_up[i] + f_down[i]-1;}printf("%d\n",N-ans);}return 0;
}



这篇关于九度1131_合唱队形【LIS】【LCS】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062635

相关文章

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

uva 10066 LCS

题意: 最长公共子序列。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include

【UVA】10534 - Wavio Sequence(LIS最长上升子序列)

这题一看10000的数据量就知道必须用nlog(n)的时间复杂度。 所以特意去看了最长上升子序列的nlog(n)的算法。 如果有2个位置,该位置上的元素为A[i]和A[j],并且他们满足以下条件: 1.dp[i] = dp[j]    (dp[x]代表以x结尾的最长上升子序列长度) 2.A[i] < A[j] 3.i < j 那么毫无疑问,选择dp[i] 一定优于选择dp[j] 那么

医院检验系统LIS源码,LIS系统的定义、功能结构以及样本管理的操作流程

本文将对医院检验系统LIS进行介绍,包括LIS系统的定义、功能结构以及样本管理的操作流程方面。 LIS系统定义 LIS系统(Laboratory Information System)是一种专门为临床检验实验室开发的信息管理系统,其主要功能包括实验室信息管理、样本管理、检验结果管理、质量控制管理、数据分析等。其主要作用是管理医院实验室的各项业务,包括样本采集、检验、结果录入和报告生成等。Li

九度1077(最大序列和)

题目链接:点击打开链接 解题思路: 很经典的一道题。首先考虑一下细节问题,当序列都是0时,显然最后要输出0;当序列都是负数时,显然要输出最大的数。 细节处理完了,就可以回到正常轨道。我们开两个变量,分别保存当前的序列和与之前的最大值,我们更新当前序列和的条件是如果当前序列和是负数的时候,那我们必须更新,否则一定会使最后结果减小。更新过程中还要更新之前最大值即可。 完整代码:

NLP文本相似度之LCS

基础 LCS(Longest Common Subsequence)通常指的是最长公共子序列,区别最长公共字串(Longest Common Substring)。我们先从子序列的定义理解: 一个序列S任意删除若干个字符得到新的序列T,则T叫做S的子序列。 子序列和子串的一个很大的不同点是,子序列不要求连接,而子串要求连接。 两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y

九度考研真题 浙大 2011-3浙大1004:Median

题目1004:Median //#include<iostream> //long long a1[1000010],a2[1000010]; //using namespace std; //int main(){ // long long n1,n2; // long long num; // // long long t; // wh

九度考研真题 浙大 2011-2浙大1002:Grading

题目1002:Grading #include<iostream> #include<stdio.h> #include<math.h>  using namespace std; int main() { double P,T,G1,G2,G3,Gj; double num; while(cin>>P) { cin>>T>>G1>>G2>>G

九度考研真题 浙大 2011-1浙大1001:A+B for Matrices

//题目1001:A+B for Matrices #include<iostream> #include<string.h> using namespace std; int main() { int M,N; int a1[11][11],a2[11][11]; int a_s[11],b_s[11]; int num=0; while(cin

九度考研真题 浙大 2010-2浙大1006:ZOJ问题

//题目1006:ZOJ问题 #include<iostream> #include<string.h> using namespace std; int main() { char s[1010]; char a[1010];//开始部分 char b[1010]; //中间部分  char c[1010];//后部分  int num1=0,n