\documentclass[10pt]{article} \usepackage[utf8]{inputenc} \usepackage{amsmath,amsthm,amssymb} \usepackage{fullpage} \usepackage{url} \pagenumbering{gobble} \usepackage{hyperref} \usepackage{graphicx} \input{statement/preamble.tex} \title{ Tutorial: Knapsack Problem} \author{} \date{} \begin{document} \maketitle \section{Solução do Problema} A solução do problema da mochila 0/1 pode ser abordada por meio de \textit{programação dinâmica}. A ideia central é decompor o problema em subproblemas menores, de forma que a solução ótima total seja composta pelas soluções ótimas desses subproblemas. \subsection{Definição do Subproblema} Seja $dp[i][w]$ o valor máximo que pode ser obtido ao considerar os $i$ primeiros itens, com capacidade máxima da mochila igual a $w$. \subsection{Função de Transição} Para cada item $i$ (com peso $p_i$ e valor $v_i$), temos duas opções: \begin{itemize} \item Não incluir o item $i$: o valor máximo permanece igual ao do subproblema anterior, isto é, $dp[i-1][w]$. \item Incluir o item $i$: caso o peso $p_i$ caiba na mochila ($p_i \leq w$), o valor máximo será o valor do item $v_i$ somado ao melhor valor possível com a capacidade restante, $dp[i-1][w - p_i]$. \end{itemize} Assim, a função de transição pode ser expressa como: \[ dp[i][w] = \begin{cases} dp[i-1][w], & \text{se } p_i > w \\ \max(dp[i-1][w],\; dp[i-1][w - p_i] + v_i), & \text{caso contrário} \end{cases} \] \subsection{Casos Base} As condições iniciais são: \[ dp[0][w] = 0, \quad \forall w \geq 0 \] \[ dp[i][0] = 0, \quad \forall i \geq 0 \] Esses casos representam que, com zero itens ou capacidade zero, o valor máximo obtido é zero. \subsection{Implementação Dinâmica} O algoritmo preenche uma tabela $dp$ de tamanho $(n+1) \times (W+1)$, onde $n$ é o número de itens e $W$ é a capacidade máxima da mochila. Cada célula é calculada a partir das decisões descritas na função de transição. \begin{verbatim} for i in 1..n: for w in 1..W: if peso[i] <= w: dp[i][w] = max(dp[i-1][w], dp[i-1][w - peso[i]] + valor[i]) else: dp[i][w] = dp[i-1][w] \end{verbatim} O resultado final é dado por $dp[n][W]$, que representa o maior valor possível que pode ser obtido sem ultrapassar a capacidade da mochila. \end{document}