首页 > 其他分享 >动态规划(1)

动态规划(1)

时间:2024-01-16 10:11:36浏览次数:33  
标签:vector int Solution cost dp 动态 规划 动规

目录

写在前面,第二次刷动规,上次就有点没弄懂这次一定拿下了

动规基础

铭记动规五部曲:

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

509斐波那契数列

class Solution {
public:
    //动规解法
    int slnA(int n)
    {
        if(n<=1)
            return n;
        vector<int> dp(n+1);
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=n;i++)
        {
            dp[i]=dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
    //动规解法2
    int slnB(int n)
    {
        if(n<=1)
            return n;
        vector<int> dp(2);
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=n;i++)
        {
            int sum=dp[0]+dp[1];
            dp[0]=dp[1];
            dp[1]=sum;
        }
        return dp[1];
    }
    int fib(int n) {
        return slnB(n);
    }
};

746使用最小花费爬楼梯

class Solution {
public:
    //动规思路
    /*
    dp[i]爬上第i层需要的最小体力
    递推公式:
    dp[i]=cost[i]+min(dp[i-1],dp[i])
    初始化
    dp[0]=cost[0],dp[1]=cost[1]
    返回值dp[n-1],dp[n-2]

    */
    int minCostClimbingStairs(vector<int>& cost) {
        int n=cost.size();
        vector<int> dp(n);
        dp[0]=cost[0];
        dp[1]=cost[1];
        for(int i=2;i<n;i++)
        {
            dp[i]=cost[i]+min(dp[i-1],dp[i-2]);

        }
        return min(dp[n-1],dp[n-2]);
    }
};

62不同路径

class Solution {
public:
    /*
    dp[i][j],到达grid[i][j]有多少种方法
    dp[i][j]=dp[i-1][j]+dp[i][j-1]
    dp[0][i]=dp[j][0]=1
    */
    int slnA(int m, int n) {
        vector<vector<int>> dp(m, vector<int>(n, 1));
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
    //只用On/Om的空间复杂度
    int slnB(int m,int n)
    {
        vector<int> dp(n,1);
        for(int i=1;i<m;i++)
        {
            for(int j=1;j<n;j++)
            {
                dp[j]=dp[j-1]+dp[j];
            }
        }
        return dp[n-1];
    }
    int uniquePaths(int m, int n) {
        return slnB(m,n);
    }
};

标签:vector,int,Solution,cost,dp,动态,规划,动规
From: https://www.cnblogs.com/liviayu/p/17966937

相关文章

  • 如何使用Java在Excel中添加动态数组公式?
    本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言动态数组公式是Excel引入的一项重要功能,它将Excel分为两种风格:Excel365和传统Excel(2019或更早版本)。动态数组功能允许用户从单个单元格中的公式......
  • 数学建模入门笔记(1)——Python pulp库解线性规划问题
    参考:Python求解线性规划——PuLP使用教程-Only(AR)-博客园(cnblogs.com)1.Definethemodelmodel=pl.LpProblem(name="",sense=pl.LpMaximize)name模型的名字sense模型的类型(pl.LpMaximize/pl.LpMinimize)2.Definethedecisionvariables用x[i]存储变量,命名为xi......
  • 精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原
    背景介绍在Java编程中,动态代理的应用非常广泛。它被广泛应用于SpringAOP框架、Hibernate数据查询、测试框架的后端mock、RPC以及Java注解对象获取等领域。静态代理和动态代理与静态代理不同,动态代理的代理关系是在运行时确定的,这使得它在灵活性上更胜一筹。相比之下,静态代理的代理......
  • SpringBoot动态权限校验,常用的实现方案
    SpringBoot.pngSpringBoot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。SpringBoot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更......
  • 编写一个小而强大的 Windows 动态屏保壁纸
    写在前面两年前我做了第一个开源软件DreamScene2动态桌面,如今受到了很多人的喜欢,这增加了我继续做好开源软件的信心。之前的这个软件一直有人希望我加入一个设置屏保壁纸的功能,因为DreamScene2就是一个单纯的动态桌面的软件,所以一直没有加入这个功能。今天我带来一个新的开源......
  • FreeSwitch: esl 调用lua动态传参&日志查看
    lua脚本在执行过程中,可动态接收参数,这样可以让系统更灵活,以上节的自动外呼为例,callout.lua改成下面这样:--主叫localcallernum=argv[1];--被叫localcalleenum=argv[2];freeswitch.consoleLog("info","debug==>caller:"..callernum..",callee:"..calleenum.......
  • Java 使用 数组实现 动态数组
    前述数组是各编程语言中最为基础的一个数据结构,在Java语言中,平时使用也很多,同时,JDK提供了动态数组的实现,ArrayList,这里我使用数组来实现一下动态数组,参考实现importjava.util.function.Consumer;/***使用数组实现动态数组ArrayList*/publicclassDynamicArray......
  • 非线性规划——Pyhton库的实现
    非线性规划(NonlinearProgramming,简称NLP)是一种优化问题的数学形式,其中目标函数或约束条件中至少有一个是非线性的。优化问题的目标是找到一组变量的取值,使得目标函数在满足一系列约束条件的情况下达到最小值或最大值。在非线性规划中,目标函数和约束条件可以包含平方项、绝对值、......
  • AnimatedList 实现动态列表
    AnimatedList实现动画  AnimatedList和ListView的功能大体相似,不同的是,AnimatedList可以在列表中插入或删除节点时执行一个动画,在需要添加或删除列表项的场景中会提高用户体验。 AnimatedList是一个StatefulWidget,它对应的State类型为AnimatedListState,添加和删......
  • [刷题班] LeetCode1480. 一维数组的动态和
    题目描述思路:前缀和前缀和数组(prefixSum)的构造方法一:classSolution{publicint[]runningSum(int[]nums){int[]preSum=newint[nums.length];preSum[0]=nums[0];for(inti=1;i<nums.length;i++){preSum[i]......