首页 > 编程语言 >经典算法题目-动态规划

经典算法题目-动态规划

时间:2024-02-25 23:55:05浏览次数:22  
标签:背包 题目 weight int 算法 遍历 经典 dp cost

动态规划

动归五部曲

一、确定dp数组以及下标的含义

二、确定递推公式

三、dp数组进行初始化

四、确定遍历顺序

五、举例推导dp数组

746. 使用最小花费爬楼梯

  • 解决思路

    • 定义dp[i] 为爬到第i个台阶的最低花费
    • 递推公式。因为每一次能爬一步或两步,dp[i] 为前面的两格走两步过来或走一步过来
    • 遍历顺序。i从小到大即可
  • 代码

public int minCostClimbingStairs(int[] cost) {
        int[] dp = new int[cost.length+1];
        for(int i = 2; i < cost.length+1; i++){
            dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
        }
        return dp[cost.length];
    }

背包问题

01背包

问题

  • n个物品、背包重量w,i物件重量weight[i],价值value[i],每件物品只能用一次。求能放哪些物品价值总和最大

一维dp解决思路

  • 定义dp数组。dp[j] 容量为j的背包能放物品的最大值

  • 递推公式。

    • dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
    • 比较放入当前物品的价值、和不放当前物品 (此时dp[j] 为不放i物品容量为w的最大价值)
  • 初始化。dp[0] = 0

  • 遍历顺序

    • 如果采用二维数组,根据递推公司,是右下角由左上角的元素计算得来
    • 而采用一维数组滚动存储二维的数据,遍历顺序物品类型从小到大,背包重量维度从大到小
    • 当背包重量维度从小到大遍历时,代表着背包里可以放多个相同的物品

代码

 public static void testWeightBagProblem(int[] weight, int[] value, int bagWeight){
        int wLen = weight.length;
        //定义dp数组:dp[j]表示背包容量为j时,能获得的最大价值
        int[] dp = new int[bagWeight + 1];
        //遍历顺序:先遍历物品,再遍历背包容量
        for (int i = 0; i < wLen; i++){
            for (int j = bagWeight; j >= weight[i]; j--){
                dp[j] = Math.max(dp[j], dp[j - weight[i]] + value[i]);
            }
        }

    }

标签:背包,题目,weight,int,算法,遍历,经典,dp,cost
From: https://www.cnblogs.com/gg12138/p/18033375

相关文章

  • 深度学习-卷积神经网络-经典的卷积网络incepttion-ResNet-DenceNet-46
    目录1.Inception2.ResNet3.DenseNet4.MobileNet1.Inception其中的一部分:Inception相比之前的VGGLeNet这些都是单条线的Inception多分支并行再concatInception第一版GoogleNet特征总结:NINNetworkinNetworkIncept_v3:NININ套了两次2.ResNet仅仅是......
  • 文心一言 VS 讯飞星火 VS chatgpt (201)-- 算法导论15.2 6题
    六、用go语言,证明:对n个元素的表达式进行完全括号化,恰好需要n-1对括号。文心一言,代码正常运行:在Go语言中,证明对n个元素的表达式进行完全括号化恰好需要n-1对括号,可以通过数学归纳法和递归思考来实现。首先,我们可以明确一个基本的观察:一个单独的元素不需要括号。将两个元素......
  • 图论算法汇总
    图论算法在信息学竞赛中有着非常广泛的应用,也频繁在考试与比赛中作为重要的考察知识.本文汇总并分类了信息学竞赛中的图论算法.1生成树与最短路1.1Prim算法Prim算法可以求出一张图的最小生成树,时间复杂度为\(\mathcal{O}((|V|+|E|)\log|V|)\).memset(dis,0x3f,sizeo......
  • Python数据结构与算法05——二分查找
    二分查找——递归版:defbinarySearch(aimlist,item):#获取列表的长度n=len(aimlist)#如果列表非空ifn>0:#计算中间索引mid=n//2#如果中间元素是目标元素,则找到了ifaimlist[mid]==item:......
  • 【国产化】禁止使用不安全的密码算法:DES、RC2,RSA(1024位及以下),MD5,SHA1
    一、引言随着互联网的普及和技术的发展,网络安全问题日益严重。密码算法作为网络安全的基石,其安全性直接关系到用户数据的安全。一些不安全的密码算法不断被曝光,给用户带来了极大的安全隐患。二、不安全的密码算法1.DESDES(DataEncryptionStandard)是一种对称加密算法,自1977年......
  • C++U6-05 - 动态规划算法入门
    目标:动态规划     兔子数列的每一项都是前两项之和,公式为f[n]=f[n−1]+f[n−2]。#include<bits/stdc++.h>usingnamespacestd;intmain(){intf[105],n;f[1]=1;f[2]=1;cin>>n;for(inti=3;i<=n;i++){......
  • 前缀和算法
    一、简析前缀和有一系列元素\(A[a_0,~a_1,~...,~a_n,~...]\),前缀和\(pre\_sum[n]=A[0]+A[1]+···+A[n]\)。利用前缀和,我们可以很高效地得到\([L,~R]\)的区间和\(\sum_{i=L}^{R}A[i]=pre\_sum[R]-pre\_sum[L-1]\)。二、相关问题2.1题目简述P8649[蓝桥杯2017省B]......
  • 【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)
    本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚......
  • SPFA算法
    一、单源最短路径typedeflonglongll;constintMAX=2e3+5;constllINF=numeric_limits<ll>::max();typedefstruct{ intto,worth;}edge;intn,m;vector<edge>G[MAX];lld[MAX];boolvis[MAX];voidspfa(ints){ fill(d+1,d+1+n,......
  • 2024牛客寒假算法基础集训营6
    A.欧拉筛处理出素数直接3重暴力循环找#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;#defineinf0x3f3f3f3fboolis_prime[N];//是否是质数,0为是,1为不是intprime[N];//质数数组inttop=1;//质数的下标intmin_p[N];//最小......