1264:【例9.8】合唱队形
# 题目描述
合唱队形是指这样的一种队形:设
你的任务是,已知所有
# 输入
输入的第一行是一个整数
# 输出
输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
# 样例
# 输入样例
8
186 186 150 200 160 130 197 220
1
2
2
# 输出样例
4
1
# 提示
对于50%的数据,保证有
对于100%的数据,保证有
# 源代码
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int main() {
int a[200], b[200], c[200];
int n, i, j, maxx;
cin >> n;
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
for (i = 1; i <= n; i++) cin >> a[i]; //同学的身高
for (i = 1; i <= n; i++) //按照从左向右的顺序计算
{
b[i] = 1;
for (j = 1; j <= i - 1; j++)
if (a[i] > a[j] && b[j] + 1 > b[i]) b[i] = b[j] + 1;
}
for (i = n; i >= 1; i--) //按照从右向左的顺序计算
{
c[i] = 1;
for (j = i + 1; j <= n; j++)
if (a[i] > a[j] && c[j] + 1 > c[i]) c[i] = c[j] + 1;
}
maxx = 0; //计算合唱队的人数max其中一个人被重复计算!
for (i = 1; i <= n; i++)
if (b[i] + c[i] > maxx) maxx = b[i] + c[i];
cout << n - maxx + 1 << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
上次更新: 2022/03/08, 01:01:22