70、爬楼梯
动态规划问题:通过把原问题分解成相对简单的子问题的方式来解决复杂问题的方法,体现了以空间换时间的算法思想,这也是其与分治法最大的区别。
动态规划解题思路和方法:求解动态规划问题的思路是定义状态并写出状态转移方程,然后可以采用自顶向下的递归+备忘录方法或者自底向上的填写状态转移表方法。
爬楼梯问题,初始时刻在第0级,默认为只有一种方法。第一级也只有一种方法。因为每次只能爬一级或两级楼梯,所以第n级楼梯只与第n-1级和第n-2级楼梯有关。
即f(n) = f(n-1) + f(n-2)
,f(n-1)表示爬到第n-1级楼梯一共多少种方法,然后再爬一级到第n级楼梯。f(n-2)表示爬到第n-2级楼梯一共多少种方法,再爬两级到第n级(注意:若爬一级则到第n-1级,已经包含在了f(n-1)中)。得到了这个递推公式就可以直接写代码了。
//爬楼梯 #include<iostream> #include<string> #include<vector> using namespace std; int climbStairs(int n) { int f[n+1]; f[0] = f[1] = 1; for(int i = 2; i<n+1; i++){ f[i] = f[i-1] + f[i-2]; } return f[n]; } int main() { int result = climbStairs(3); cout<<result<<endl; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2023-01-11 43、商品服务---品牌管理---级联更新
2022-01-11 03-docker中的名词概念
2022-01-11 02-docker的历史
2022-01-11 01-docker为什么出现
2022-01-11 02-ES简介
2022-01-11 01-全文检索