[NOIP 2014复习]第二章:动态规划——NOIP历届真题回顾

序列型动态规划

1、Wikioi 1058 合唱队形

题目描述 Description

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

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

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

8

186 186 150 200 160 130 197 220

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

对于50%的数据,保证有n<=20;

对于全部的数据,保证有n<=100。

此题可以用最长上升子序列和最长下降子序列做,不过有些细节需要处理,如图

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXN 300

int high[MAXN]; //high[i]=第i个同学的身高
int up[MAXN],dn[MAXN];

int max(int a,int b)
{
	if(a>b) return a;
	return b;
}

int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&high[i]);
		up[i]=dn[i]=1;
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=i;j++)
			if(high[j]<high[i]) up[i]=max(up[i],up[j]+1);
	for(int i=n;i>=1;i--)
		for(int j=n;j>=i;j--)
			if(high[j]<high[i]) dn[i]=max(dn[i],dn[j]+1);
	int maxPeople=-1; //最多参与人数
	for(int i=1;i<=n;i++)
		maxPeople=max(maxPeople,dn[i]+up[i]-1);
	printf("%d\n",n-maxPeople);
	system("pause");
	return 0;
}



时间: 2024-12-22 02:18:10

[NOIP 2014复习]第二章:动态规划——NOIP历届真题回顾的相关文章

[NOIP 2014复习]第二章:搜索

一.深度优先搜索 二.广度优先搜索 1.Wikioi 1004 四子连棋 题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双方交替走棋,任意一方可以先走,如果某个时刻使得任意一种颜色的棋子形成四个一线(包括斜线),这样的状态为目标棋局. ● ○ ●   ○ ● ○ ● ● ○ ● ○ ○ ● ○   输入描述 Input Description 从

数据结构期末复习第二章线性表

第二章:线性表 1.线性结构的基本特征答:线性结构是若干数据元素构成的有序(次序)集① 集合中必存在唯一的一个“第一元素”:② 集合中必存在唯一的一个 “最后元素”:③ 除第一元素之外,均有 唯一的前驱:④ 除最后元素之外,均有 唯一的后继. 2.线性表的顺序存储结构和链式存储结构分别是______.(  D )   A. 顺序存取的存储结构.顺序存取的存储结构  B. 顺序存取的存储结构.随机存取的存储结构   C. 随机存取的存储结构.随机存取的存储结构  D. 随机存取的存储结构.顺序存取

Java复习第二章

Java第二章 标识符由字母数字下划线和美元符号组成,长度不受限 : 第一个字符不是数字字符 : 不能是关键字 : 标志不能是 true false null:区分大小写 (中文可以作为变量名) java的基本数据类型有8种分别 为:booleam.byte.short.char.int.long.float.double 不赋值默认 是false或者0或者null(byte); 八进制在赋值数字前加0,十六进制加0x: 1 2 4 8 byte short int long:2 char ch

[NOIP复习]第二章:动态规划

一.背包问题 1.Wikioi 1014 装箱问题 题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入描述 Input Description 一个整数v,表示箱子容量 一个整数n,表示有n个物品 接下来n个整数,分别表示这n 个物品的各自体积 输出描述 Output Description 一个整数,表示箱子剩余

[NOIP 2014复习]第五章:图论

一.最短路问题 1.图的存储方式 2.Floyd算法求多源最短路 3.Dijsktra算法求单源最短路 4.Bellman-Ford算法求单源最短路 5.SPFA求单源最短路 (1)Wikioi 1173 最优贸易 题目描述 Description [问题描述] C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路,双向通行的道路在统计条数时也计为1 条. C 国幅员

java编程基础复习-------第二章

一.标识符 java中标识符的命名规则: 以数字.字母.下划线和$符号组成:不能用数字开头:不能是java的关键字. 注意:不要用$命名标识符.习惯上,$只用在机器自动产生的源代码中. 二.关键字 1.Java所有的关键字都是小写的: 2.字面常量true.false.null都不是关键字,但他们不能用作标识符. 3.关键字goto和const是C++保留的关键字,目前在Java中不能使用.如果出现在Java程序中,虽然Java编译器能够识别它们,但是会产生错误信息. 三.数据类型 char 

数据库复习第二章

[TOC] 2.1 关系数据结构及形式化定义 1.关系 关系模型的数据结构只有一个数据结构:关系 关系数据结构的形式化定义: 1.域(domain) ? 一组具有相同数据类型的值的集合(如 \(1...100\) 的所有正整数集合) 2.笛卡尔积(cartesian product) 在域上的一种运算 定义: 给定一组域, \(D_1,D_2,....D_n\) ,其笛卡尔积为: \(D_1 \times D_2 \times ... \times D_n = \{ (d_1,d_2,...,d

软件工程第二章 习题2 第3题

航空订票系统技术在目前是一个技术上成熟的系统,并且在航空公司内部准备采取有力措施保证资金和人员配置等.因此,分阶段开发“航空订票系统”的构想是可行的.为了使航空公司适应现代化市场竞争的需求,促进机票预订管理信息化,不断满足旅客预订机票的要求,争取更好的经济效益,可立即着手系统的开发与完善. 1> 目标:在一个月内建立一个高效率,无差错的航空公司机票预定系统 2> 存在的主要问题:人工不易管理,手续繁琐 3> 建立新系统 ① 经济可行性                成本效益分析 成本估算

软件工程第二章 习题2 第5题

电话号码= [校内电话号码|校外电话号码] 校内电话号码= 非零数字+ 3 位数字 校外电话号码= [本市号码|外地号码] 本市号码= 数字零+ 8 位数字 外地号码= 数字零+ 3 位数字+ 8 位数字 非零数字= [1 |2 |3 |4 |5 |6 |7 |8 |9] 数字零= 0 3位数字= 3{数字}3 8位数字= 非零数字+ 7 位数字 7位数字= 7{数字}7 数字= [0 |1 |2 |3 |4 |5 |6 |7 |8 |9] 其中,[ ]意思是或,从校内电话号码或校外电话号码中选