动态规划问题

本文深入探讨动态规划的概念,通过实例解析动态规划的优化过程,包括斐波那契数列和背包问题等经典案例,强调如何定义状态、选择和状态转移方程,以及动态规划在避免重复计算中的作用。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
传统的递归树,计算效率非常低,因为内容太多了。所以我们需要优化递归函数就是高水平的动态规划

在这里插入图片描述
在这里插入图片描述
这个题目的本质就是,想要解决凑11快钱的,问题,这样可以分为
3个递归,只要解决凑10块钱(差一块11),凑9,或者凑6(差五块钱)的问题就行了。

著名的背包问题
在这里插入图片描述
在这里插入图片描述
明确状态和选择。
会变化的就是状态,让状态变化的就是选择
看起来就是自变量和因为变量一样,会发生变化的就是自变量,影响变化的因为就是因变量。

在这里插入图片描述
明确dp数组的问题。
写状态转移方程。转移状态。

在这里插入图片描述
在这里插入图片描述
不把第i个用品装进dp数组的含义就是,我只把前I - 1个用品放进dp数组里,
在这里插入图片描述

在这里插入图片描述

背包代表里面行为有两种
1.是东西放进去,放进去之前还要考录一下,容量能不能放进去一个物品,毕竟还是有容量限制的
2.第二个状态,我这个东西能不能替换背包里别的东西?替换之后价值是变大了还是变小了。
在这里插入图片描述
动态规划经典题目
斐波那数列
每一项都是前两项的和
在这里插入图片描述
在这里插入图片描述
菲波那数列因为其特性,所以当n = 1,n = 2时候面对的是不断地递归。
线性规划也是这个特性
我们当前的值收到前面值得影响,而且很大程度的影响。

在这里插入图片描述
两种状态,选择或者不选,这两种状态都有道理。

在这里插入图片描述
斐波那契数列这样存在冗余可以被优化
写一个数组去优化这个东西,去存储这个东西

class Solution {
   
    public int fib(int n) {
   
        
        int[] moment = new int[n + 1];
        return helper(moment,n);

    }

public int helper(int[] moment,int n){
   
//每次传递进来一个n是下标
    if(n == 0 || n == 1 ){
   
        return n;
    }
    if(moment[n] != 0){
   
        return moment[n];
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值