53. Somme maximale des sous-séquences (simple)

Idées:

Et la plus longue sous-séquence croissante et la plus longue séquence palindromique exemple classique similaire, il s'agit d'une programmation dynamique

Équation de transition d'état:

dp [i] représente la plus grande somme de sous-séquences avant le nombre courant

1) Si dp [i-1] est un nombre positif, ajoutez simplement nums [i] directement, dp [i] = dp [i-1] + nums [i]

2) Si dp [i-1] est un nombre négatif, alors dp [i] ne prend que nums [i], ce qui équivaut à resélectionner une nouvelle sous-séquence

最终dp [i] = Math.max (dp [i-1] + nombres [i], nombres [i])

 

Code 1:

class Solution {
    public int maxSubArray(int[] nums) {
	int n=nums.length;
	int[] dp=new int[n+1];
		
	dp[0]=nums[0];
	for(int i=1;i<n;i++){
	    dp[i]=Math.max(nums[i],dp[i-1]+nums[i]);
	}
		
	int res=dp[0];
	for(int i=1;i<n;i++){
	    res=Math.max(res,dp[i]);
	}
	return res;
    }
}

 

panne:

1) C'est le deuxième type de dp, la valeur actuelle dépend de toutes les valeurs calculées précédemment

Appartiennent à la programmation linéaire

 

2) Deux cycles sont utilisés, qui peuvent être combinés en un seul cycle

int res=dp[0];
for(int i=1;i<n;i++){
    dp[i]=Math.max(nums[i],nums[i]+dp[i-1]);
    res=Math.max(res,dp[i]);
}

 

3) Le dernier état ne peut pas être renvoyé directement ici (dp [n-1]).

La production devrait être d' autant  dp[0],, dp[1]......,dp[n - 1]  lire, selon le plus élevé

La même situation s'applique également à la question 300 "Leguo": la sous-séquence ascendante la plus longue.

Je suppose que tu aimes

Origine blog.csdn.net/di_ko/article/details/115260814
conseillé
Classement