Day 42 || 完全背包、518. 零钱兑换 II 、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

news/2024/11/5 18:04:01 标签: 算法, 动态规划

完全背包

题目链接:卡码网第52题

思路:和之前01背包一样,但是物品可以无限放置,所以之前二维数组中的背包容量是倒序遍历的,现在可以正序遍历即可重复放入。

import java.util.Scanner;
public class Main {
    public static void main (String[] args) {
        Scanner scaner = new Scanner(System.in);
        int kind = scaner.nextInt();
        int size = scaner.nextInt();
        int[] weight = new int[kind];
        int[] value = new int[kind];
        for (int i=0;i<kind;i++){
            weight[i]=scaner.nextInt();
            value[i]=scaner.nextInt();
        }
        int[][] dp = new int[kind+1][size+1];
        for(int i=1;i<=kind;i++){
            for (int j=0;j<=size;j++){
                if(j>=weight[i-1]){
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - weight[i - 1]] + value[i - 1]);
                }else {
                    dp[i][j] = dp[i - 1][j]; // 如果不能放入第 i 件物品
                }        
            }
        }
        System.out.println(dp[kind][size]);
    }
}

518. 零钱兑换 II

题目链接:力扣题目链接

思路:因为是可以无限使用相同规格的金币,完全背包和之前一样容量正序即可;但是需要注意的是因为是求可能性的数量所以需要初始化容量为0时候为1。

//一维
class Solution {
    public int change(int amount, int[] coins) {
        int[] dp = new int[amount + 1];
        dp[0] = 1; // 初始状态,凑成金额0的组合数为1(即什么都不选)

        for (int coin : coins) {
            for (int i = coin; i <= amount; i++) {
                dp[i] += dp[i - coin];
            }
        }

        return dp[amount];
    }
}

//二维
class Solution {
    public int change(int amount, int[] coins) {
        int[][] dp = new int[coins.length + 1][amount + 1];
       
        // 初始化:凑成金额0的方法只有1种,即不选任何硬币
        for (int j = 0; j <= coins.length; j++) {
            dp[j][0] = 1;
        }
        
        // 填充 dp 表
        for (int j = 1; j <= coins.length; j++) {
            for (int i = 0; i <= amount; i++) {
                if (i >= coins[j - 1]) {
                    // 使用当前硬币或不使用当前硬币的组合数
                    dp[j][i] = dp[j - 1][i] + dp[j][i - coins[j - 1]];
                } else {
                    // 无法使用当前硬币,只能继承上一个状态的组合数
                    dp[j][i] = dp[j - 1][i];
                }
            }
        }
        
        return dp[coins.length][amount];
    }
}

377. 组合总和 Ⅳ

题目链接:力扣题目链接

思路:思路和上一题“518. 零钱兑换 II”一样,但是需要注意的是,如果先循环物品再循环背包会造成结果只是组合,只有先背包后物品才是组合。

70. 爬楼梯 (进阶)

题目链接:卡码网:57. 爬楼梯

思路:和“377. 组合总和 Ⅳ”完全一样。

时间:2h


http://www.niftyadmin.cn/n/5739736.html

相关文章

《Python编程快速上手》第一天---前三章打基础

第一章 Python基础 1、新的数学操作符 ** &#xff1a;指数操作 //&#xff1a;整除 /&#xff1a;除法 2、字符串连接和复制 连接&#xff1a;“” 例如&#xff1a;“Alice”“Bobby” > “AliceBobby” 复制&#xff1a;“*” 例如&#xff1a;“Alice” * 5 > “…

[linux]docker快速入门

安装 docker官网: CentOS | Docker Docs 准备工作: 准备ConstOS7的虚拟机环境账密: root/root飞书文档: Docs 卸载旧版本 // 首先如果系统中已经存在旧的Docker&#xff0c;则先卸载 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest…

情怀系列国际版棋牌完整源码具备强大的多语言扩展功能,涵盖了900多款子游戏,专为全球市场的游戏开发和运营设计。

情怀棋牌源代码的服务器端使用JAVA和Node.js开发&#xff0c;采用RocketMQ作为消息队列中间件&#xff0c;有效防止服务器堵塞、消峰。数据库使用MySQL&#xff0c;媒体存储采用MongoDB&#xff0c;缓存系统使用Redis。管理后台则采用PHP语言开发。 客户端使用Cocos Creator进…

DDR5内存售价暴降80%,终于到了无脑下手的时候

DDR5 内存刚面世那会儿&#xff0c;大家吐槽最多的便是频率低、延迟高、价格还死贵死贵。 前两年首批 DDR5 内存频率多集中在 4800、5200、5600MT/s 等入门水平。 延迟高、游戏性能不如高频 DDR4 内存的同时&#xff0c;单条 16G 售价普遍来到 1000 元开外&#xff0c;部分 3…

Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是受座头鲸捕食行为启发而提出的一种新型元启发式优化算法。该算法通过模拟座头鲸围绕猎物的螺旋游动和缩小包围圈的方式&#xff0c;在…

基于LangChain手工测试用例转Web自动化测试生成工具

在传统编写 Web 自动化测试用例的过程中&#xff0c;基本都是需要测试工程师&#xff0c;根据功能测试用例转换为自动化测试的用例。市面上自动生成 Web 或 App 自动化测试用例的产品无非也都是通过录制的方式&#xff0c;获取操作人的行为操作&#xff0c;从而记录测试用例。整…

Windows系统使用OpenSSL生成自签名证书

Nginx服务器添加SSL证书。 要在Windows系统的Nginx Web服务器上使用OpenSSL生成证书&#xff0c;并确保该证书能在局域网内被计算机信任&#xff0c;你可以按照以下详细步骤进行操作&#xff1a; 一、生成证书 下载并安装OpenSSL&#xff1a; 从OpenSSL的官方网站下载适用于Wi…

为什么 Allow 配合 meta noindex 比使用Disallow好?

为什么 Allow 配合 meta noindex 1、Disallow 的问题 当你使用 Disallow: / 时&#xff1a; 爬虫根本不会访问你的页面 因此永远看不到你的 meta noindex 标签 如果有其他网站链接到你的页面&#xff0c;Google 可能还是会将其编入索引&#xff08;因为它无法确认你是否真的…