首页 > 其他分享 >动态规划

动态规划

时间:2023-07-09 16:46:22浏览次数:33  
标签:return int Tn cost 台阶 动态 规划 dp

动态规划做题步骤:

  1. 状态表示:dp表中每一个格子所表示的意义。

  2. 状态转移方程:dp[i] 等于什么。

  3. 初始化:保证填表不越界。

  4. 填表顺序:为了填写当前格子,它需要的数据已经准备好。

  5. 返回值:根据题目要求和状态表示返回结果。


第n个泰波那契数:

链接:https://leetcode.cn/problems/n-th-tribonacci-number/
题目描述:泰波那契序列 Tn 定义如下:
T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2
给你整数 n,请返回第 n 个泰波那契数 Tn 的值。
示例1:
输入:n = 4
输出:4
解释:
T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

点击查看代码
public int tribonacci(int n) {
        // 状态表示:dp[i] 表示:返回的第i个泰波那契数的值
        // 状态方程:dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1]
        // 初始化: dp[0] = 0; dp[1] = dp[2] = 1
        // 填表顺序: 从左往右
        // 返回值: dp[n]

        if (n == 0) return 0;
        if (n == 1 || n == 2) return 1;
        int[] dp = new int[n + 1];
        dp[1] = dp[2] = 1;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1];
        }
        return dp[n];
    }

三步问题:

链接:https://leetcode.cn/problems/three-steps-problem-lcci/
题目描述:三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
示例1:
输入:n = 3
输出:4
说明: 有四种走法

点击查看代码
public int waysToStep(int n) {
        // 状态表示: dp[i]:表示小孩上到第i阶台阶的上楼梯方式
        // 状态转移方程: dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
        // 初始化: dp[1] = 1; dp[2] = 2; dp[3] = 4;
        // 填表顺序: 从左往右
        // 返回值: dp[n]

        int MOD = (int) 1e9 + 7;
        if (n == 1 || n == 2) return n;
        if (n == 3) return 4;
        int[] dp = new int[n+1];
        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 4;
        for (int i = 4; i <= n; i++){
            dp[i] = ((dp[i-1] + dp[i-2]) % MOD + dp[i-3]) % MOD;
        }
        return dp[n];
    }

使用最小花费爬楼梯:

链接:https://leetcode.cn/problems/min-cost-climbing-stairs/
题目描述:给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
示例1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。

点击查看代码
public int minCostClimbingStairs(int[] cost) {
        // 状态表示: dp[i]: 到达第i阶台阶的最低花费
        // 状态方程: dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
        // 初始化: dp[0] = 0; dp[1] = 0;
        // 填表顺序: 从左往右
        // 返回值: dp[n]
        int n = cost.length;
        if (n == 0 || n == 1) return 0;
        int[] dp = new int[n+1];
        for (int i = 2; i <= n; i++){
            dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
        }
        return dp[n];

    }

标签:return,int,Tn,cost,台阶,动态,规划,dp
From: https://www.cnblogs.com/imjwttt/p/17538925.html

相关文章

  • 动态库单独添加Address Sanitizer
    原文地址:https://www.cnblogs.com/liqinglucky/p/address-sanitizer-in-library.htmlAddressSanitizer集成的原理是在汇编过程中(参考:程序编译过程与运行时内存-liqinglucky-博客园(cnblogs.com))编译出.o文件时就将AddressSanitizer的运行时库替换malloc()/free()实现内存......
  • 灯塔工厂建设规划之工业4.0
    行业趋势在人工智能、物联网和5G技术的深度渗透下,3C既能作为交互的入口又能是交互的出口,3C产业已成为场景最丰富的产业领域,柔性化生产、个性化定制才能给用户提供更好的体验。市场需求要求企业进行数字化升级,工业互联网+智能制造升级。一座充满魅力、动力、活力、创新力的国际化......
  • 动态规划(Ⅱ)
    状压DP状压DP,是通过将状态压缩为整数来达到优化转移目的的一类DP。一般的,若集合大小不超过\(n\),集合中每个元素都是小于\(k\)的自然数,我们可以把这个集合看作一个\(n\)位\(k\)进制数,以一个\([0,k^n-1]\)之间的十进制整数的形式作为DP状态的一维。而状压DP,最常见......
  • 动态规划之 01背包问题
    1. 什么是01背包问题?01背包问题是一种经典的组合优化问题,它的描述如下:有n种物品和一个容量为C的背包,每种物品有一个重量w[i]和一个价值v[i],其中i=1,2,…,n。问如何选择物品放入背包,使得背包内的物品总价值最大,且不超过背包的容量?这里的01表示每种物品只能选择放入或不放入,不......
  • 动态规划之 多重背包
    动态规划之多重背包问题1. 问题描述及分析动态规划是一种解决复杂问题的方法,它将一个大问题分解为若干个子问题,通过求解子问题,从而得到原问题的最优解。动态规划的核心思想是避免重复计算,利用已有的结果进行状态转移。背包问题是一类经典的动态规划问题,它描述了如何在给......
  • 动态规划 背包问题总结
     目录 01背包二维写法01背包一维写法完全背包二维带枚举写法完全背包二维普通写法完全背包一维写法多重背包二维写法多重背包二进制优化 1. 01背包二维写法dp[i][j]=Math.max(dp[i-1][j],dp[i-1][j-w[i-1]]+v[i-1]) //......
  • 动态规划之 完全背包
    1.题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关......
  • 统计的系统客观性与动态进化性•Freq频率与Bayes两大学派及争论•统计推断•Bayes学派
    统计的系统客观性:统计数据及其活动不是片面的,而是系统客观反映客观现象。周期的做“总体统计”+随机/按需/周期做“抽样统计”;统计的动态进化性:统计数据及其活动不是静止的,持续的更新(量变)与进化(质变)。先验信息的收集挖掘和加工,数量化,形成"先验分布"并持续进化。p......
  • 将RUP与管理成功的规划集成在一起
    本文来自于RationalEdge:本文概述了如何在业务建模、需求管理和工具支持的重要领域中,将RUP和MSP集成起来处理MSP中的缺口。最终结果是一个更全面的处理方法,分析和指定一个组织的转化,以及软件工具和技术的使用。编者注:下面的文章描述了管理成功的规划(ManagingSuccessfulProg......
  • POJ 2976:Dropping tests 01 分数规划
    DroppingtestsTimeLimit: 1000MS MemoryLimit: 65536KTotalSubmissions: 12291 Accepted: 4293DescriptionInacertaincourse,youtake n tests.Ifyouget ai outof bi questionscorrectontest i,yourcumulativeaverageisdefinedtobe.Gi......