Updating lazy-frog files
This commit is contained in:
BIN
delete-and-earn/arthur-dolival-delete-and-earn-tutorial.pdf
Normal file
BIN
delete-and-earn/arthur-dolival-delete-and-earn-tutorial.pdf
Normal file
Binary file not shown.
66
delete-and-earn/arthur-dolival-delete-and-earn-tutorial.tex
Normal file
66
delete-and-earn/arthur-dolival-delete-and-earn-tutorial.tex
Normal file
@@ -0,0 +1,66 @@
|
||||
\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: Deletar e Ganhar}
|
||||
\author{Leetcode 740}
|
||||
\date{}
|
||||
\begin{document}
|
||||
\maketitle
|
||||
O problema pode ser resolvido utilizando uma abordagem clássica de \textbf{programação dinâmica}.
|
||||
A ideia central é que, ao escolher um número \( x \), ganhamos uma certa quantidade de pontos, mas perdemos a possibilidade de escolher os números \( x - 1 \) e \( x + 1 \), já que eles devem ser removidos da sequência.
|
||||
|
||||
\subsection*{Modelagem}
|
||||
|
||||
Primeiro, agrupamos os números iguais da sequência e calculamos o total de pontos que seria obtido caso escolhêssemos todos os elementos de valor \( i \):
|
||||
\[
|
||||
\text{points}[i] = (\text{quantidade de vezes que } i \text{ aparece}) \times i
|
||||
\]
|
||||
Assim, o problema passa a ser equivalente a escolher quais valores \( i \) maximizarão a soma total de pontos, respeitando a restrição de que, ao escolher \( i \), não podemos escolher \( i-1 \) nem \( i+1 \).
|
||||
|
||||
\subsection*{Definição da DP}
|
||||
|
||||
Definimos:
|
||||
\[
|
||||
dp[i] = \text{pontuação máxima possível utilizando apenas os números de } 1 \text{ até } i
|
||||
\]
|
||||
|
||||
\subsection*{Função de Transição}
|
||||
|
||||
A cada passo, temos duas escolhas:
|
||||
\begin{itemize}
|
||||
\item \textbf{Não escolher} o número \( i \): nesse caso, o resultado é o mesmo que \( dp[i - 1] \);
|
||||
\item \textbf{Escolher} o número \( i \): ganhamos \( \text{points}[i] \), mas não podemos utilizar \( i - 1 \), então somamos com \( dp[i - 2] \).
|
||||
\end{itemize}
|
||||
|
||||
A função de transição é, portanto:
|
||||
\[
|
||||
dp[i] = \max(dp[i - 1], \, dp[i - 2] + \text{points}[i])
|
||||
\]
|
||||
|
||||
\subsection*{Casos Base}
|
||||
|
||||
\[
|
||||
dp[0] = 0, \quad dp[1] = \text{points}[1]
|
||||
\]
|
||||
|
||||
\subsection*{Resposta Final}
|
||||
|
||||
A pontuação máxima possível é:
|
||||
\[
|
||||
dp[m]
|
||||
\]
|
||||
onde \( m \) é o maior valor presente na sequência original.
|
||||
|
||||
\subsection*{Complexidade}
|
||||
|
||||
\begin{itemize}
|
||||
\item \textbf{Tempo:} \( O(m) \), onde \( m \) é o valor máximo na sequência;
|
||||
\item \textbf{Espaço:} \( O(m) \), podendo ser otimizado para \( O(1) \) se armazenarmos apenas os dois últimos estados da DP.
|
||||
\end{itemize}\end{document}
|
||||
BIN
delete-and-earn/arthur-dolival-delete-and-earn.pdf
Normal file
BIN
delete-and-earn/arthur-dolival-delete-and-earn.pdf
Normal file
Binary file not shown.
42
delete-and-earn/arthur-dolival-delete-and-earn.tex
Normal file
42
delete-and-earn/arthur-dolival-delete-and-earn.tex
Normal file
@@ -0,0 +1,42 @@
|
||||
\documentclass{maratona}
|
||||
|
||||
\begin{document}
|
||||
\begin{ProblemaAutor}{}{Deletar e Ganhar}{1}{256}{Leetcode 740}
|
||||
|
||||
O problema consiste em determinar a pontuação máxima que pode ser obtida ao realizar uma série de operações sobre uma sequência de números inteiros.
|
||||
Em cada operação, é possível escolher um número \( x \) da sequência, somar \( x \) pontos ao total e, em seguida, remover \textbf{todos} os elementos iguais a \( x - 1 \) e \( x + 1 \) da sequência.
|
||||
O processo pode ser repetido até que não existam mais números disponíveis.
|
||||
O objetivo é maximizar a pontuação total obtida ao final das operações.
|
||||
|
||||
\Entrada
|
||||
|
||||
A entrada é composta por duas linhas.
|
||||
A primeira linha contém um inteiro \( n \) (\( 1 \leq n \leq 20000 \)), representando o número de elementos da sequência.
|
||||
A segunda linha contém \( n \) inteiros \( a_1, a_2, \ldots, a_n \) (\( 1 \leq a_i \leq 10000 \)), separados por espaços, correspondentes aos valores da sequência.
|
||||
|
||||
\Saida
|
||||
|
||||
A saída deve conter um único inteiro, representando a pontuação máxima possível obtida após realizar as operações descritas.
|
||||
|
||||
\ExemploEntrada
|
||||
|
||||
\begin{Exemplo}
|
||||
\texttt{3} & \texttt{8}\\
|
||||
\texttt{3~4~5} & \\
|
||||
\rowcolor{gray!20}\texttt{6} & \texttt{9}\\
|
||||
\rowcolor{gray!20}\texttt{2~2~3~3~3~4} & \\
|
||||
\texttt{5} & \texttt{9}\\
|
||||
\texttt{1~2~3~4~5} & \\
|
||||
\end{Exemplo}
|
||||
|
||||
|
||||
|
||||
\Notas
|
||||
|
||||
Para o primeiro caso de teste: \( (3, 4, 5) \), a melhor escolha é remover \( 3 \), o que concede 3 pontos e remove o número \( 4 \). Em seguida, remove-se o número \( 5 \), totalizando \( 3 + 5 = 8 \) pontos.
|
||||
|
||||
Para o segundo caso de teste: \( (2, 2, 3, 3, 3, 4) \), a melhor estratégia é escolher o número \( 3 \), que concede \( 3 \times 3 = 9 \) pontos, removendo todos os \( 2 \) e \( 4 \); o total máximo é \( 9 \).
|
||||
|
||||
Para o terceiro caso de teste: \( (1, 2, 3, 4, 5) \), a estratégia ótima é escolher \( 1 \), \( 3 \) e \( 5 \), obtendo \( 1 + 3 + 5 = 9 \) pontos no total.
|
||||
\end{ProblemaAutor}
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user