La subsecuencia no decreciente (LIS) común más larga de programación dinámica

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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44723496/article/details/109058058
Recomendado
Clasificación