当前位置: 首页 > article >正文

leetcode 刷题day36动态规划Part05 背包问题(完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ、70. 爬楼梯 (进阶))

完全背包

完全背包的每件商品都有无限个,和01背包的一不同主要体现在遍历顺序上。为了保证每个物品仅被添加一次,01背包内嵌的循环是从大到小遍历。而完全背包的物品是可以添加多次的,所以要从小到大去遍历。

518. 零钱兑换 II

思路:每一种面额的硬币有无限个是完全背包问题。背包的容量为amount,物品的重量和价值都是硬笔金额。求组合数,
dp[j]表示容量为j时成立的组合数。

代码如下:

class Solution {
    public int change(int amount, int[] coins) {
        int[] dp=new int[amount+1];
        dp[0]=1;
        for(int i=0;i<coins.length;i++){
            for(int j=coins[i];j<=amount;j++){
                dp[j]+=dp[j-coins[i]];
            }
        }
        return dp[amount];
    }
}

377. 组合总和 Ⅳ

思路:本题与上一题的区别在于本题是求排列的个数。

如果求组合数就是外层for循环遍历物品,内层for遍历背包。
如果求排列数就是外层for遍历背包,内层for循环遍历物品。

代码如下:

class Solution {
    public int combinationSum4(int[] nums, int target) {
        int[] dp=new int[target+1];
        dp[0]=1;
        for(int j=0;j<=target;j++){
            for(int i=0;i<nums.length;i++){
                if(j>=nums[i]){
                    dp[j]+=dp[j-nums[i]];
                }
            }
        }
        return dp[target];
    }
}

70. 爬楼梯 (进阶)

思路:dp[i]指爬到有i个台阶的楼顶,有dp[i]种方法。台阶可以重复使用-完全背包问题,从前往后遍历背包。求排列的个数,背包是外层循环。

代码如下:

import java.util.Scanner;
class Main{
    public static void main(String [] args){
        Scanner scan=new Scanner(System.in);
        int m,n;
        while (scan.hasNextInt()) {
            n=scan.nextInt();
            m=scan.nextInt();
            int[] dp=new int[n+1];
            dp[0]=1;
            for(int j=1;j<=n;j++){
                for(int i=1;i<=m;i++){
                    if(j>=i) dp[j]+=dp[j-i];
                }
            }
            System.out.println(dp[n]);
        }
    }
}

http://www.kler.cn/news/337712.html

相关文章:

  • typescript使用webpack打包编译问题
  • 35.搜索插入位置
  • MATLAB工具库:数据统计分析工具MvCAT、MhAST等
  • 1.4TB! 全台湾2024年三维建筑模型3DTiles数据
  • 知识图谱入门——11:构建动态图谱渲染应用:Vue3与Neo4j的集成与实践
  • STM32-HAL库驱动DHT11温湿度传感器 --2024.9.28
  • Docker_速通_01
  • 停车场停车位检测数据集2166张 违停 带标注 voc yolo 2类
  • LLM大模型的必备入门书:吴恩达大佬 LLM CookBook+AI产品经理必看 《AI重新定义产品经理》
  • 深入理解Web浏览器与服务器的连接过程
  • 期权懂|00后期权新手看过来:如何在期权中交易呢?
  • 性能测试学习2:常见的性能测试策略(基准测试/负载测试/稳定性测试/压力测试/并发测试)
  • Spring入门
  • Kubernetes资源详解
  • 浅谈人工智能之大模型的流式调用:Java 后端实践
  • 台球助教小程序开发搭建/桌球助教到店软件
  • Axios 快速入门
  • 本地访问autodl的jupyter notebook
  • 架构师必须多维度理解架构:视点、视角、视图(附PPT:华为企业架构数据、应用、技术架构设计方法论)
  • MySQL存储过程原理、实现及优化