LIS是最长上升子序列。什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段最长严格上升的部分,它不一定要连续。
就像这样:22, 33, 44, 77 和 22, 33, 44, 66 就是序列 22 55 33 44 11 77 66 的两个上升子序列,最长的长度是 4
4。
典型的动态规划题目;
#include<iostream>
#include<cstring>
using namespace std;
int f[10000], b[10000];
int lis(int n) {
memset(f, 0, sizeof f);
int res = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (b[j] < b[i]) {
/*在这里填写必要的代码*/
}
}
res = max(res, f[i]);
}
return res+1;
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", b + i);
}
printf("%d\n", lis(n));
return 0;
}
最后可知,填空代码为:
if(f[j]+1>f[i])
{
f[i]=f[j]+1;
res=max(res,f[i]);
}
答案不唯一,仅供参考。