首页 > 编程语言 >数据结构算法系列----对动态规划的感悟

数据结构算法系列----对动态规划的感悟

时间:2024-03-25 13:05:21浏览次数:30  
标签:感悟 动态 题目 int 模版 ---- 背包 数据结构 dp

简介:

      最近我一直在做和复习动态规划的题目,对动态规划有了一些新的理解和感悟。本文就是基于最近做的一些题目写的。


一、动态规划的题目形式和选择

      当题目是对于求某一串数字或者字符的最值时,一般就回想到三种解法,dfs暴搜、动态规划、贪心。在这三个之中显而易见最好想最简单的是dfs,个人认为最难想的是贪心,其实除了少量题目,大部分要用贪心的题目能用贪心也能用动态规划解决,因为dp的规律相对来说是好找的多的。

       当题目是给定定量要你去求这个定量中另一个变量的最大值,其实这种都是背包问题,这种是比较简单的dp直接套模版就好了。


二、动态规划的步骤

        卡哥把动规分为动规五部曲,分别是:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

   

但是我个人认为其实三部曲就够了,总结成一句话就是定义方程初始化:

      1、确定dp数组含义(最重要)

      2、确定状态转移方程

      3、dp数组初始化


举个例子 leecode:零钱兑换 II 

       很显然这是一个完全背包,但是和模版中状态转移方程式不同

下面这个是模版中的状态转移方程:

dp[j]=max(dp[j]-nums[i],dp[j])

 这个是本题的状态转移方程:

dp[j]+=dp[j-coins[i]];

      为什么会不同,其实是因为dp的含义不一样,模版中的dp是当背包容量为j时最大能装的价值,而本题的是当背包为容量j时有几种方法能装满这个背包。所以因为dp含义的不同状态转移方程也不同。

完整代码:

class Solution {
public:
    int change(int amount, vector<int>& coins) {
      int n=coins.size();
      vector<int> dp(amount+1,0);
      dp[0]=1;
      for(int i=0;i<n;i++){
        for(int j=coins[i];j<=amount;j++){
            dp[j]+=dp[j-coins[i]];
        }
      }
      return dp[amount];
    }
};

标签:感悟,动态,题目,int,模版,----,背包,数据结构,dp
From: https://blog.csdn.net/2301_77961281/article/details/137009979

相关文章

  • 用MATLAB实现nsgaII算法求解多目标问题
    一、nsgaII算法简介NSGA-II(非支配排序遗传算法II)是一种多目标优化算法,2000年由Srinivas,N.,Deb,Kalyanmoy提出,是一种效果非常好的多目标优化算法,尤其是其中的快速非支配排序,极大提高了算法的运行效率。其基本步骤如下:1.初始化种群:随机生成一个包含多个个体的初始种群。......
  • 深度学习(18)--注意力机制详解
    目录一.什么是注意力机制(AttentionMechanism)二.什么是注意力(Attention)三.自注意力机制(Self-AttentionMechanism)3.1.对输入数据进行Embedding操作3.2.q,k操作3.3.v操作 3.4.代码实现四.多头自注意力机制(Multi-headSelf-AttentionMachanism) 4.1.q,k操作4.2.v......
  • 数据在内存中的存储
    一.整数和字符在内存中的存储1.整数的二进制表示有三种形式:原码,反码,补码。    对于整数的二进制表示形式,我们规定:二进制的最高位为符号为,正数最高位为“0”,负数的最高位为“1”。其他位为数值位。    正整数的原码,反码,补码形式一样。   负整数的反......
  • 我与我修身齐家治国平天下的人生理想-博客初篇
      这篇文章是我原个人独立博客的首篇文章,发表于2015-03-30。现转于此  每个人一辈子的高度都不尽相同,但相同的是每个人都有一个自己奋斗的过程;每个人都有一个自己的“修身齐家治国平天下”的人生理想。    《大学》有云: 古之欲明明德于天下者,先治其国;欲治其国......
  • 看赵本山(瞎子)与潘长江(瘸子)相约去观灯的对话,多搞笑!
    看赵本山(瞎子)与潘长江(瘸子)相约去观灯的对话,多搞笑!——小品《大观灯》(中2)的台词(接上)潘长江:哎对亲家,这回你你你座下我不调理你了啊赵本山:我也看明白了要不跟你玩点速度那是不行了潘:挺挺鬼的呢你说赵:别闹了,干啥来了潘:亲家,唠点真格的(正经)今个不是新春的佳节那大街上有......
  • 吴恩达机器学习笔记第六章逻辑回归分析以及代码实现
    第六章对线性代数和导数的要求比之前几章是要高一些的,对于对应的数学知识点我会在下方顺便仔细地指出来并在能力范围内给予一定的推导,尽量保证各位能明白不用再查来查去的,不用重蹈我的覆辙......
  • 吴恩达机器学习实践笔记,第四章的多元梯度下降的实现
    https://blog.csdn.net/out_look520/article/details/107695529这个链接里面有需要的数据集,有需要的兄弟姐妹们自己解决哟,我下面的数据就是从那个博主那里拿的今天实践了一下多元梯度下降哈,其实道理和原来二元的一样,也是采用下面这个式子只是θ的数量多了一些而已,废话不多......
  • YOLOv8-Seg改进:多创新点魔改设计 | 双层路由注意(BRA)+广义特征金字塔网络(GFPN)+多头检测
    ......
  • 【408直通车】(考研数一、二、三合集)高等数学公式全覆盖(下)
    微分方程一阶微分方程:y′=f......
  • 2024年3月更新,10个AI绘画工具推荐
    本文整理了10个热门的AI绘图在线生成器,为设计师们和创意工作者提供一份全面的参考,帮助大家在创作过程中更上一层楼!1.  MidjourneyMidjourney是一款非常流行的AI绘图在线生成器,拥有简洁明了的界面和丰富的绘画功能,非常适合初学者和小白用户上手。易用性:界面简洁明了,用户可以......