2023-07-13 Questão diária LeetCode (soma mínima de caminhos descendentes)

13-07-2023 Uma pergunta por dia

1. Número do tópico

931. 下降路径最小和

2. Link do tópico

Clique para pular para o local do tópico

3. Descrição do tópico

Dada uma matriz de matriz de inteiros quadrados nxn , encontre e retorne a soma mínima dos caminhos descendentes através da matriz .

Um caminho descendente pode começar com qualquer elemento na primeira linha e selecionar um elemento de cada linha. O elemento selecionado na próxima linha está no máximo a uma coluna de distância do elemento selecionado na linha atual (ou seja, o primeiro elemento diretamente abaixo ou diagonalmente à esquerda ou à direita). Especificamente, o próximo elemento na posição (row, col) deve ser (row + 1, col - 1), (row + 1, col) ou (row + 1, col + 1).

dica:

  • n == matriz.comprimento == matriz[i].comprimento
  • 1 <= n <= 100
  • -100 <= matriz[i][j] <= 100

4. Código de resolução de problemas

class Solution {
    
    
public:
    int minFallingPathSum(vector<vector<int>>& matrix) {
    
    
        int m = matrix.size();
        int n = matrix[0].size();
        int dp[m+1][n+1];
        memset(dp, 0, sizeof(dp));
        for(int i = 0; i < m; ++i){
    
    
            for(int j = 0; j < n; ++j){
    
    
                dp[i][j] = INT_MAX;
            }
        }
        for(int i = 0; i < m; ++i){
    
    
            for(int j = 0; j < n; ++j){
    
    
                if(i == 0){
    
    
                    dp[i][j] = matrix[i][j];
                    continue;
                }
                if(j - 1 >= 0){
    
    
                    dp[i][j] = min(dp[i][j], matrix[i][j] + dp[i-1][j-1]);    
                }
                dp[i][j] = min(dp[i][j], matrix[i][j] + dp[i-1][j]);
                if(j + 1 < n){
    
    
                    dp[i][j] = min(dp[i][j], matrix[i][j] + dp[i-1][j+1]);
                }
            }
        }
        int min0 = INT_MAX;
        for(int i = 0; i < n; ++i){
    
    
            min0 = min(min0, dp[m-1][i]);
        }
    return min0;
    }
};

Cinco ideias para resolver problemas

(1) Este tópico usa um algoritmo de programação dinâmica para resolver o problema.

(2) Primeiro defina o estado, dp[i][j] representa a soma mínima dos caminhos descendentes para a posição (i, j) . Defina o estado inicial, a soma mínima de todos os caminhos descendentes na primeira linha é o valor da matriz correspondente.

(3) O título fornece como cada estado é transferido, e a transferência do estado é realizada de acordo com o prompt do título, e pode ser recursivamente recursivamente.

(4) Por fim, retorne o valor mínimo da última linha, que é a soma mínima do caminho descendente .

Acho que você gosta

Origin blog.csdn.net/qq_56086076/article/details/131693906
Recomendado
Clasificación