Updating lazy-frog files
This commit is contained in:
BIN
vacations/arthur-dolival-vacations-tutorial.pdf
Normal file
BIN
vacations/arthur-dolival-vacations-tutorial.pdf
Normal file
Binary file not shown.
61
vacations/arthur-dolival-vacations-tutorial.tex
Normal file
61
vacations/arthur-dolival-vacations-tutorial.tex
Normal file
@@ -0,0 +1,61 @@
|
||||
\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: Férias}
|
||||
\author{Codeforces 363 (Div. 1)}
|
||||
\date{}
|
||||
\begin{document}
|
||||
\maketitle
|
||||
\section{Solução do Problema}
|
||||
|
||||
O problema de planejar as férias de Miguel para minimizar os dias de descanso, respeitando a regra de não repetir a mesma atividade física ou mental em dias consecutivos, pode ser resolvido de forma muito eficiente usando \textbf{programação dinâmica}. A intuição é que a decisão do que fazer no dia atual depende exclusivamente da disponibilidade de atividades no dia e do que Miguel escolheu fazer no dia imediatamente anterior.
|
||||
|
||||
\subsection{Definição do Subproblema}
|
||||
|
||||
Como a restrição olha apenas para a atividade do dia anterior, precisamos carregar essa informação no nosso estado. Definimos o nosso estado da programação dinâmica como:
|
||||
|
||||
dp[i][j] = \text{o número mínimo de dias de descanso acumulados até o dia } i, \text{ dado que a atividade escolhida no dia } i \text{ foi } j.
|
||||
|
||||
Mapeamos os possíveis valores de $j$ (as escolhas de Miguel) da seguinte forma:
|
||||
\begin{itemize}
|
||||
\item $j = 0$: Descansar
|
||||
\item $j = 1$: Participar de uma competição
|
||||
\item $j = 2$: Ir à academia
|
||||
\end{itemize}
|
||||
|
||||
A resposta final para o problema será o menor valor entre todas as atividades possíveis no último dia de férias: $\min(dp[n][0], dp[n][1], dp[n][2])$.
|
||||
|
||||
\subsection{Função de Transição}
|
||||
|
||||
Para calcular as opções do dia $i$, olhamos para os melhores resultados alcançados no dia $i-1$ e verificamos o que o calendário ($A[i]$) nos permite fazer hoje.
|
||||
|
||||
\textbf{1. Descansar ($j = 0$):}
|
||||
Miguel sempre pode descansar em qualquer dia, independentemente do que ele fez ontem. Como descansar adiciona $1$ ao nosso contador de dias de descanso, a transição é:
|
||||
$$dp[i][0] = \min \big( dp[i-1][0], dp[i-1][1], dp[i-1][2] \big) + 1$$
|
||||
|
||||
\textbf{2. Competir ($j = 1$):}
|
||||
Miguel só pode competir se houver competição hoje ($A[i] == 1$ ou $A[i] == 3$). Além disso, ele não pode ter competido ontem. Logo, os estados válidos anteriores são apenas descanso ($0$) ou academia ($2$):
|
||||
$$dp[i][1] = \min \big( dp[i-1][0], dp[i-1][2] \big)$$
|
||||
\textit{Se não houver competição hoje, definimos o estado como inalcançável ($dp[i][1] = \infty$).}
|
||||
|
||||
\textbf{3. Ir à academia ($j = 2$):}
|
||||
De forma análoga, Miguel só pode treinar se a academia estiver aberta ($A[i] == 2$ ou $A[i] == 3$) e se ele não tiver ido à academia ontem. Os estados válidos anteriores são descanso ($0$) ou competição ($1$):
|
||||
$$dp[i][2] = \min \big( dp[i-1][0], dp[i-1][1] \big)$$
|
||||
\textit{Se a academia estiver fechada hoje, definimos o estado como inalcançável ($dp[i][2] = \infty$).}
|
||||
|
||||
\subsection{Casos Base}
|
||||
|
||||
Para que as transições do primeiro dia de férias ($i = 1$) funcionem corretamente, inicializamos o dia $0$ (o momento anterior ao início das férias).
|
||||
|
||||
Como antes das férias começarem não há nenhum dia de descanso acumulado, independentemente da atividade "fictícia" que possamos imaginar, zeramos os estados iniciais:
|
||||
|
||||
$$dp[0][0] = 0$$
|
||||
$$dp[0][1] = 0$$
|
||||
$$dp[0][2] = 0$$\end{document}
|
||||
BIN
vacations/arthur-dolival-vacations.pdf
Normal file
BIN
vacations/arthur-dolival-vacations.pdf
Normal file
Binary file not shown.
48
vacations/arthur-dolival-vacations.tex
Normal file
48
vacations/arthur-dolival-vacations.tex
Normal file
@@ -0,0 +1,48 @@
|
||||
\documentclass{maratona}
|
||||
|
||||
\begin{document}
|
||||
\begin{ProblemaAutor}{}{Férias}{1}{256}{Codeforces 363 (Div. 1)}
|
||||
|
||||
Miguel tem \(n\) dias de férias e pretende aproveitá-los para estudar programação e também praticar esportes. Para cada um desses dias, ele sabe antecipadamente duas informações: se a academia estará aberta e se haverá uma competição online disponível. Assim, cada dia se enquadra em uma das quatro situações possíveis: sem academia e sem competição, sem academia mas com competição, com academia mas sem competição, ou com ambos disponíveis.
|
||||
|
||||
Em cada dia, Miguel deve escolher exatamente uma ação: descansar, participar da competição (caso ele exista naquele dia) ou ir à academia (caso esteja aberta). Seu objetivo é descansar o mínimo possível. No entanto, ele impõe a si mesmo uma regra importante: \textbf{não repetir a mesma atividade em dias consecutivos}. Em outras palavras, Miguel não aceita fazer esporte dois dias seguidos, nem participar de competições em dias consecutivos, embora descansar possa ocorrer repetidamente sem qualquer restrição.
|
||||
|
||||
Dado o calendário das férias, determine o menor número de dias de descanso que Miguel será obrigado a ter.
|
||||
|
||||
\Entrada
|
||||
|
||||
A primeira linha contém um inteiro positivo \(n\) (\(1 \le n \le 100\)), o número de dias de férias.
|
||||
|
||||
A segunda linha contém \(n\) inteiros \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 3\)), separados por espaços, onde cada \(a_i\) descreve as opções do \(i\)-ésimo dia:
|
||||
\begin{itemize}
|
||||
\item \(a_i = 0\): academia fechada e sem competição;
|
||||
\item \(a_i = 1\): academia fechada e há competição;
|
||||
\item \(a_i = 2\): academia aberta e sem competição;
|
||||
\item \(a_i = 3\): academia aberta e há competição.
|
||||
\end{itemize}
|
||||
|
||||
\Saida
|
||||
|
||||
A saída consiste de um único número inteiro, o número mínimo possível de dias em que Miguel terá que descansar, obedecendo à restrição de não repetir a mesma atividade em dias consecutivos.
|
||||
|
||||
\ExemploEntrada
|
||||
|
||||
\begin{Exemplo}
|
||||
\texttt{4} & \texttt{2}\\
|
||||
\texttt{1~3~2~0} & \\
|
||||
\rowcolor{gray!20}\texttt{7} & \texttt{0}\\
|
||||
\rowcolor{gray!20}\texttt{1~3~3~2~1~2~3} & \\
|
||||
\texttt{2} & \texttt{1}\\
|
||||
\texttt{2~2} & \\
|
||||
\end{Exemplo}
|
||||
|
||||
|
||||
|
||||
\Notas
|
||||
|
||||
No primeiro caso de teste, Miguel pode participar da competição no dia 1 e ir à academia no dia 3. Descansando nos dias 2 e 4.
|
||||
|
||||
No segundo caso de teste, Miguel pode participar da competição nos dias 1, 3, 5 e 7 e ir à academia nos demais.
|
||||
|
||||
No terceiro caso de teste, como Miguel não pode ir à academia em dois dias seguidos ele será obrigado a descansar em um dos dias.\end{ProblemaAutor}
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user