\documentclass[10pt]{article} \usepackage[utf8]{inputenc} \usepackage{amsmath,amsthm,amssymb} \usepackage{fullpage} \usepackage{url} \pagenumbering{gobble} \usepackage{hyperref} \title{ Tutorial: Caminho de Menor Soma} \author{} \date{} \begin{document} \maketitle \section{Solução do Problema} O problema consiste em encontrar o \textbf{menor custo} necessário para percorrer uma grade (\textit{matriz}) de inteiros positivos. A grade possui \( n \) linhas e \( m \) colunas, e cada célula contém um número positivo que representa o custo de passar por ela. O objetivo é sair da célula \textbf{superior esquerda} da grade e chegar à célula \textbf{inferior direita}, movendo-se apenas para a \textbf{direita} ou para \textbf{baixo}. A soma dos valores das células visitadas deve ser a menor possível. Este problema pode ser resolvido de forma eficiente utilizando \textbf{programação dinâmica}. \subsection{Definição do Subproblema} Seja uma matriz de custos \( C \) de tamanho \( n \times m \). Definimos: \[ dp[i][j] = \text{o menor custo para chegar à célula } (i,j) \text{ a partir de } (0,0). \] Ou seja, \( dp[i][j] \) representa o custo mínimo para alcançar exatamente a posição \( (i, j) \). \subsection{Função de Transição} Como só é possível mover-se para a \textbf{direita} ou para \textbf{baixo}, a célula \( (i,j) \) só pode ser alcançada a partir de: \begin{itemize} \item \( (i-1, j) \): movimento vindo de \textbf{cima}; \item \( (i, j-1) \): movimento vindo da \textbf{esquerda}. \end{itemize} Assim, o custo mínimo para chegar a \( (i,j) \) é dado por: \[ dp[i][j] = C[i][j] + \min(dp[i-1][j],\ dp[i][j-1]). \] \subsection{Casos Base} \begin{itemize} \item Primeira célula: \[ dp[0][0] = C[0][0] \] \item Primeira linha (somente movimentos para a direita): \[ dp[0][j] = dp[0][j-1] + C[0][j] \] \item Primeira coluna (somente movimentos para baixo): \[ dp[i][0] = dp[i-1][0] + C[i][0] \] \end{itemize} \subsection{Construção da Tabela} Após inicializar os casos base, preenchermos o restante da matriz \( dp \) utilizando: \[ dp[i][j] = C[i][j] + \min(dp[i-1][j],\ dp[i][j-1]). \] Ao término do processo, o valor da última posição: \[ dp[n-1][m-1] \] representa o \textbf{menor custo possível} para ir da célula inicial até a célula final.\end{document}