共48道题,当前是第34

初赛真题


01 #include<bits/stdc++.h>
02 using namespace std;
03 int n;
04 int a[1005], f[1005];
05 int main() {
06     int i, j;
07     cin >> n;
08     int ans = 0;
09     for (i = 0; i < n; i++) cin >> a[i];
10     for (i = 0; i < n; ++i) {
11         f[i] = 1;
12         for (j = i - 1; j >= 0; --j)
13             if (a[i] > a[j]) f[i] = max(f[i], f[j] + 1);
14         ans = max(ans, f[i]);
15     }
16     cout << ans << ";
17     return 0;
18 }

输入保证是正整数 $n$ 以及一个长度为 $n$ 的数组,且相邻元素之间有一个空格。如下例:

3
1 2 3


1. A。
2. B。
3. B。
4. B。
5. B。
6. C。

代码主要是求出长度为 $n$ 的序列中最长上升子序列的长度。

Question

1. 若将第 6 行的 int i,j 改为 int i; ,则程序会出现编译错误。( )

2. 若将第 13 行的 a[i] > a[j] 改为 a[i] < a[j] ,运行结果不变。( )

3. f[i] 表示以 $i$ 结尾的最长不下降子序列长度。( )

4. 若把第 10 行 for (i = 0; i < n; ++i) 的 i = 0; 换成 i = 1; ,则程序运行结果不变。( )

5. 若 n = 100 ,则 ans 的最大值是( )

6. 若 n = 15,a=5, 7, 6, 8, 1, 3, 5, 4, 2, 9, 14, 11, 12, 8, 7 ,则 ans 的值为( )