码迷,mamicode.com
首页 > 其他好文 > 详细

动态规划-爬楼梯问题

时间:2016-12-12 23:56:00      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:实现   设计   知识库   方法   href   ogr   word   struct   时间   

其实我一直分不清楚动态规划和分治,递归之间的区别与联系。。。<( ̄3 ̄)> 三者之间应该是有点关系的吧

网上说:

1. 什么是动态规划?
         和分治法一样,动态规划(dynamicprogramming)是通过组合子问题而解决整个问题的解。
         分治法是将问题划分成一些独立的子问题,递归地求解各子问题,然后合并子问题的解。
         动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。
         此时,分治法会做许多不必要的工作,即重复地求解公共的子问题。动态规划算法对每个子问题只求解一次,将其结果保存起来,从而避免每次遇到各个子问题时重新计算答            案。
2. 动态规划算法的设计
两种方法:
         自顶向下(又称记忆化搜索、备忘录):基本上对应着递归函数实现,从大范围开始计算,要注意不断保存中间结果,避免重复计算
         自底向上(递推):从小范围递推计算到大范围
动态规划的重点:
         递归方程+边界条件.

例题: 一个人每次只能走一层楼梯或者两层楼梯,问走到第80层楼梯一共有多少种方法。

第一次提交,我的答案:说是时间超出限制了。。。。。

public class Solution {
public int climbStairs(int n) {

if(n==1)
return 1;
else if(n==2)
return 2;
else
return climbStairs(n-1)+climbStairs(n-2);
}
}

动态规划-爬楼梯问题

标签:实现   设计   知识库   方法   href   ogr   word   struct   时间   

原文地址:http://www.cnblogs.com/maowuyu-xb/p/6166106.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!