D. 代码填空:LIS
LIS是最长上升子序列。什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段最长严格上升的部分,它不一定要连续。
就像这样:2, 3, 4, 7 和 2, 3, 4, 6 就是序列 2 5 3 4 1 7 6 的两个上升子序列,最长的长度是 4。
LIS模板题,再写一遍加深印象
#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]) { f[i] = max(f[i], f[j] + 1); } } 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; }
#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]) { f[i] = max(f[i], f[j] + 1); } } 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;}
永远渴望,大智若愚(stay hungry, stay foolish)