La subsecuencia no descendente común más larga (LIS)
Descripción del problema
En una secuencia numérica, busque la subsecuencia más larga (puede que no sea continua), de modo que esta subsecuencia no sea descendente (no descendente).
Entrada de muestra
7
1 2 3-1-2 7 9
Salida de muestra
5
Ecuación de transferencia dinámica: dp [i] = max {1, dp [j] + 1}
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int s[n];
for(int i = 0; i < n; i++){
cin>>s[i];
}
int dp[n];
memset(dp, 0, sizeof(dp));
int ans = -1; //记录结果
for(int i = 0; i < n; i++){
dp[i] = 1;
for(int j = 0; j < i; j++){
if(s[i] >= s[j] && dp[j] + 1 > dp[i]){
dp[i] = dp[j] + 1; //动态转移方程
}
}
ans = max(ans, dp[i]);
}
cout<<ans;
return 0;
}