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 .