首页 > 试题广场 >

请阅读以下代码和输入,写出程序的输出结果。 #includ

[填空题]
请阅读以下代码和输入,写出程序的输出结果。
#include<iostream>
using namespace std;

int main( ) {
     const int MAX_N = 1000;
     int n, ans;
     int a[MAX_N], f[MAX_N];
     cin >> n;
     for (int i = 0; i < n; ++i) {
         cin >> a[i];
         f[i] = 1;
         for (int j = 0; j < i; ++j) {
             if ((a[j] < a[i]) && (f[j] >= f[i]))
                 f[i] = f[j] + 1;
         }
     }

     ans = 0;
     for (int i = 1; i < n; ++i) {
         if (f[i] > ans) ans = f[i];
     }
     cout << ans << endl;
}

输入

10

2 5 13 6 7 4 10 3 5 8
输出:1

最长升序列个数,了解一下。
每个 f [ i ] 代表从 a[0] 开始到 a[i] 之间,有多少个数小于等于 a[i] 并且是 升序的,例子中的:

10

2 5 13 6 7 4 10 3 5 8,
2,5,6,7,10这五个是最长升序列,所以输出5
发表于 2018-08-19 15:03:28 回复(0)
注意每次f[i]的初始化都为1,按照i=0.i=1,i=2.....依次去推倒就行了
发表于 2018-08-16 20:42:37 回复(0)
f[i]表示a[0]到a[i]位置内,最长的升序序列的长度,每次都初始化为1是因为肯定包含它本身。
发表于 2018-08-28 17:34:35 回复(0)
为什么不是3?每次f[i]都初始化为1了呀
发表于 2018-08-18 19:53:15 回复(0)
a[] = {2,5,13,6,7,4,10,3,5,8}
f[]={1,2,3,3,4,2,5,2,3,5} 
max(f) = 5
发表于 2018-08-18 17:02:32 回复(0)
求的是连续递增的最大序列
发表于 2018-08-18 16:29:08 回复(0)