2004年分区联赛提高组之三 合唱队形(dp)
来源:互联网 发布:linux自动挂载硬盘 编辑:程序博客网 时间:2024/05/16 15:15
2004年分区联赛提高组之三 合唱队形
Description
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
Input
输入的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。
Output
输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
Sample Input
8186 186 150 200 160 130 197 220
Sample Output
4
分析:从左往右做一次最长不下降序列,从右往左做一次最长不下降序列,显然最后的k=max{b[i]+c[i]}-1,最后n-k即为所求。
最长不下降序列方程:f[i]=max(f[j]+1) (1<=i<=n,1<=j<i,a[j]>a[i])
代码
#include <cstdio>using namespace std;int a[200],b[200],c[200];int main(){int n;scanf("%d",&n);for (int i=1;i<=n;i++)scanf("%d",&a[i]);for (int i=1;i<=n;i++){b[i]=1;for (int j=1;j<=i-1;j++)if ((a[i]>a[j])&&(b[j]+1>b[i]))b[i]=b[j]+1;}for (int i=n;i>=1;i--){c[i]=1;for (int j=i+1;j<=n;j++)if ((a[j]<a[i])&&(c[j]+1>c[i]))c[i]=c[j]+1;}int max=0;for (int i=1;i<=n;i++)if (b[i]+c[i]>max)max=b[i]+c[i];printf("%d",n-max+1);return 0;}
阅读全文
0 0
- 2004年分区联赛提高组之三 合唱队形(dp)
- 2004年分区联赛提高组之三 合唱队形(dp)
- Codevs 1058 合唱队形 ---2004年NOIP全国联赛提高组 dp
- 2003年分区联赛提高组之三 加分二叉树 dp
- 1996年分区联赛提高组之三 挖地雷
- 合唱队形 2004年NOIP全国联赛提高组
- 2004年分区联赛提高组之三 合…
- 2004年分区联赛提高组之三 合…
- 2004年分区联赛提高组之二 合并果子
- luogu1091【2004提高】合唱队形(dp)
- 2006年分区联赛提高组之二 金明的预算方案(dp)
- 挖地雷_1996年分区联赛提高组之三_ssl1071_dfs
- 1996年分区联赛提高组之三 挖地雷 JudgeOnline 1071
- 1996年分区联赛提高组之四 砝码称重
- [NOIP提高组2004]合唱队形
- 2004年分区联赛提高组之二 合…
- 2004年分区联赛普级组之三 FBI树
- 2004年分区联赛普级组之三 FBI树
- 信息系统分析与设计----系统分析概述
- jvm什么时候会触发full gc
- android socket java和C通信
- SylixOS块设备CACHE管理
- JSCPC 2017 参赛总结
- 2004年分区联赛提高组之三 合唱队形(dp)
- 【java】线程同步关键字volatile,synchronize,取消串行化关键字transient
- 离散题目8
- oracle 通用函数
- Web Fragment在项目中的使用
- 蓝桥杯 算法训练 Hankson的趣味题(数论)
- Zabbix 介绍
- Android BLE 蓝牙开发入门
- 第四章课后习题