动态规划

台阶问题
有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法?
f(i)=f(i-1)+f(i-2);

矩阵路径最小问题
给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有路径中最小的路径和。如果给定的m如大家看到的样子,路径1,3,1,0,6,1,0是所有路径中和最小的,所以返回12.
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0
解决方案:
假设矩阵m的大小为M*N,行数为M,列数为N,生成大小和m一样的矩阵dp,行数为M,列数为N。dp[i][j]的值表示从左上角,也就是(0,0)位置,走到(i,j)位置的最小路径和。
dp
1 4 9 18
4
14
22
dp[i][j]=m[i][j]+{dp[i-1][j]或者dp[i][j-1]中的最小值}

最长递增子序列的问题
给定数组arr,返回arr的最长递增子序列长度。比如arr={2,1,5,3,6,4,8,9,7},最长递增子序列为{1,3,4,8,9},返回arr的最长递增子序列长度。比如arr={2,1,5,3,6,4,8,9,7},最长递增子序列为{1,3,4,8,9}所以返回这个子序列的长度为5。
解决方案:
arr:2 1 5 3 6 4 8 9 7
dp:1 1 2 2 3 3 4 5 4
dp[i]表示在必须以arr[i]这个书结尾的情况下,
arr[0..i]中最大递增子序列长度。
dp[i]=max{dp[j]+1(0<=j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值