正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2013 第一轮真题 › 第 25 题
NOIP 提高 2013 第一轮 第 25 题:最长上升子序列长度(LIS)
题目
```
#include <stdio.h>
const int SIZE = 100;
int main()
{
int height[SIZE], num[SIZE], n, ans;
int i, j;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &height[i]);
num[i] = 1;
for (j = 0; j < i; j++) {
if ((height[j] < height[i]) && (num[j] >= num[i]))
num[i] = num[j]+1;
}
}
ans = 0;
for (i = 0; i < n; i++) {
if (num[i] > ans) ans = num[i];
}
printf("%d\n", ans);
return 0;
}
```
输入:
8
3 2 5 11 12 7 4 10
输出:_________本小题
请写出程序的输出结果。
答案
4
题解
考点定位
本题考「LIS 模拟」,对应大纲 4.3.2 动态规划(难度【3】)。
解题过程
num[i] = 以 height[i] 结尾的最长上升子序列长。按原卷输入逐项递推取 max:
答案:4。
易错提醒
① O(n²) 递推:num[i]=max(num[j])+1(j<i, h[j]<h[i]);② 手算列表不易错。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号