Tex代码(给学弟们讲动态规划时用到的)

使用的图片
dp1
num2
num23
num24

num25
num26
num27
num28
NumTriangle

代码:

\documentclass{beamer}

\usepackage[UTF8, scheme = plain]{ctex}
\usetheme{Warsaw}
%\usecolortheme{beaver}

\usepackage{graphicx}

\usepackage{listings}
\lstset{language = C++, numberstyle=\tiny,keywordstyle=\color{blue!70},commentstyle=\color{red!50!green!50!blue!50},rulesepcolor=\color{red!20!green!20!blue!20},basicstyle=\ttfamily\small}


\title{动态规划}
\author{陶鸿杰}
\institute{QQ:1170755856}
\date{2019/05/05}

%-------------------------------------------------------------------------------------------------
\begin{document}

%---------------------------section A-----------------------------------------
\section{简单的问题}
\subsection{介绍}
\frame{\titlepage}

%---------------------------------------------
\subsection{数字三角形}
\begin{frame}
\frametitle{\href{http://poj.org/problem?id=1163}{数字三角形(POJ1163)}}

%------------左右分栏------
\begin{minipage}[b]{0.30\linewidth}
	\includegraphics[scale=0.5]{pic/NumTriangle.jpg}
\end{minipage}
\hfill
\begin{minipage}[b]{0.55\linewidth}

	 在左侧的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。\\ 
	 
	    \begin{itemize}
	 	\item 路径上的每一步都只能往左下或 右下走。
	 	\item 只需要求出这个最大和即可,不必给出具体路径。
	 	\item 三角形的行数大于1,小于等于100,数字为 0 - 99。
	 \end{itemize}
\end{minipage}
\end{frame}

\begin{frame}[fragile]
\frametitle{问题分析:}

%------------左右分栏------
\begin{minipage}[b]{0.30\linewidth}
	\includegraphics[scale=0.5]{pic/NumTriangle.jpg}
\end{minipage}
\hfill
\begin{minipage}[b]{0.55\linewidth}
	\begin{itemize}
		\item 三角形的行数大于1,小于等于100,数字为 0 - 99。
		\item 暴力的时间复杂度是 $O(2^n)$,而 $2^{100}$ 肯定会超时
		\item 在不考虑记忆话搜索的情况下,我们需要怎么解决这个问题呢?
		
	\end{itemize}
	
\end{minipage}
\end{frame}



\begin{frame}[fragile]
\frametitle{问题分析:}

%------------左右分栏------
\begin{minipage}[b]{0.30\linewidth}
	\includegraphics[scale=0.5]{pic/NumTriangle.jpg}
\end{minipage}
\hfill
\begin{minipage}[b]{0.55\linewidth}
	\iffalse
	三角形的行数最大是100,暴力的时间复杂度是 $O(2^n)$,而 $2^{100}$ 肯定会超时\\
	在不考虑记忆话搜索的情况下,我们需要怎么解决这个问题呢?\\
	我们以a[i][j]表示这个数字三角形第i行j列上的数字
	\fi
	\begin{itemize}
		\item 用a[i][j]存储这个数字三角形第i行的第j个数字
		\item 当前的位置dp[i][j]看成一个状态
		\item 则dp[i][j]的状态只能由它的上一层头顶上的那两个状态转移到的
	\end{itemize}
	
\end{minipage}
\end{frame}

\begin{frame}[fragile]
\frametitle{问题分析:}

%------------左右分栏------
\begin{minipage}[b]{0.30\linewidth}
	\includegraphics[scale=0.5]{pic/NumTriangle.jpg}
\end{minipage}
\hfill
\begin{minipage}[b]{0.55\linewidth}
\begin{itemize}
	\item 我们已经知道对于任意一个位置,它的状态dp[i][j]是由它的上面两个状态转移过来的\\
	\item 我们反过来想,如果我们让路径从下往上走,那么:对于任意一个位置,它的状态dp[i][j]是由它的下面两个状态转移过来的
\end{itemize}

\end{minipage} 
\begin{block}{状态转移方程:}
  $dp[i][j] = a[i][j] + max(dp[i+1][j], dp[i+1][j+1])$
\end{block}

\end{frame}

\begin{frame}[fragile]
\frametitle{我们可以写出代码了}
\begin{block}{核心代码  (复杂度为$O(n^2)$)}
	\begin{lstlisting}
for(int i=n-1;i>0;i--)
    for(int j=1;j<=i;j++)
	a[i][j] += max(a[i+1][j],a[i+1][j+1]);
printf("%d\n",a[1][1]);
	\end{lstlisting}
\end{block}
动态规划
\end{frame}
%--------------------------------动态规划解题的一般思路------------------------
\begin{frame}[fragile]
\frametitle{动态规划解题的一般思路}

\begin{minipage}[b]{0.30\linewidth}
	\begin{figure}
		\centering
		\includegraphics[scale=0.40]{pic/NumTriangle.jpg}
	\end{figure}
	
\end{minipage}
\hfill
\begin{minipage}[b]{0.65\linewidth}
	
	\begin{block}{1.将原问题分解为子问题}
		\begin{itemize}
			\item 把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决。
			\item 子问题的解一旦求出就会被保存,所以每个子问题只需求解一次。
		\end{itemize}
	\end{block}
\end{minipage}



\end{frame}

\begin{frame}[fragile]
\frametitle{动态规划解题的一般思路}

\begin{minipage}[b]{0.30\linewidth}
\begin{figure}
	\centering
	\includegraphics[scale=0.40]{pic/NumTriangle.jpg}
\end{figure}

\end{minipage}
\hfill
\begin{minipage}[b]{0.65\linewidth}

\begin{block}{2.确定状态}
	\begin{itemize}
		\item 动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。
		\item 一个“状态”对应于一个或多个子问题,某个“状态”下的“值”,就是这个“状态”所对应的子问题的解。
	\end{itemize}
\end{block}
\end{minipage}
\end{frame}

\begin{frame}[fragile]
\frametitle{动态规划解题的一般思路}

\begin{minipage}[b]{0.30\linewidth}
\begin{figure}
\centering
\includegraphics[scale=0.40]{pic/NumTriangle.jpg}
\end{figure}

\end{minipage}
\hfill
\begin{minipage}[b]{0.65\linewidth}

\begin{block}{3.确定一些初始状态(边界状态)的值}
\begin{itemize}
	\item 就以“数字三角形”为例,初始状态就是底边数字,值就是底边数字值。
\end{itemize}
\end{block}
\end{minipage}
\end{frame}

\begin{frame}[fragile]
\frametitle{动态规划解题的一般思路}

\begin{minipage}[b]{0.30\linewidth}
	\begin{figure}
		\centering
		\includegraphics[scale=0.40]{pic/NumTriangle.jpg}
	\end{figure}
	
\end{minipage}
\hfill
\begin{minipage}[b]{0.65\linewidth}
	
	\begin{block}{4.确定状态转移方程}
		\begin{itemize}
			\item 定义出什么是“状态”,以及在该“状态”下的“值”后,就要找出不同的状态之间如何迁移——即如何从一个或多个“值”已知的“状态”,求出另一个“状态”的“值”(“人人为我’递推型)。状态的迁移可以用递推公式表示,此递推公式也可被称作“状态转移方程”。
		\end{itemize}
	\end{block}
\end{minipage}
\end{frame}

\begin{frame}[fragile]
\frametitle{能用动规解决的问题的特点}
\begin{block}{问题具有最优子结构的性质}
	\begin{itemize}
		\item 如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质
	\end{itemize}
\end{block}
\begin{block}{无后效性}
	\begin{itemize}
		\item 当前的若干个状态值一旦确定,则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值