资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
数字三角形 给你一个数字三角形 形式如下 12345678910找出从第一层到最后一层的一条路 使得所经过的权值之和最小或者最大 分析 你会立刻发现这是一个动态规划的决策问题 每次有两种选择 向左和向右 一个n层的数字三角形完整路线有2 n条 所以当n比较大的时候 用回溯法是行不通滴 如果用d i j 为从格子 i j 出发时得到的最大和 包括格子 i j 本身 那么可以得到状态转移方程 d i j a i j max d i 1 j d i 1 j 1 递归计算 有了状态转移方程就好办了 intdp inti intj if i n returnd i j a i j elsereturnd i j max dp i 1 j dp i 1 j 1 重叠子问题 这样做是正确的 但是时间效率太低 其原因在于重复计算 1 1 2 1 2 2 3 1 3 2 3 2 3 3 4 1 4 2 4 2 4 3 4 2 4 3 4 3 4 4 记忆化搜索 显而易见 这个算法就是最简单的搜索算法 时间复杂度为2n 明显是会超时的 分析一下搜索的过程 实际上 很多调用都是不必要的 也就是把产生过的最优状态 又产生了一次 记忆化搜索 记忆化搜索把程序分成两部风 首先把d数组初始化为 1 intdp inti intj memset d 1 sizeof d if d i j 0 returnd i j elseif i n returnd i j a i j elsereturnd i j a i j max dp i 1 j dp i 1 j 1 时间复杂度为n 2 记忆化的功效 动态规划的实质 可以看出动态规划的实质就是这也就是为什么我们常说动态规划必须满足重叠子问题的原因 记忆化 正符合了这个要求 记忆化搜索 递推计算 因为在计算d i j 前 它所需要的d i 1 j 和d i 1 j 1 一定已经计算出来了 for i 1 i 1 i for j 1 jd i 1 j 1 d i j a i j d i 1 j elsed i j a i j d i 1 j 1 END POJ1163POJ2760
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号