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

2.07 算法练习

1. 多重背包基础问题

算法思路

1. 每个物品有限制数量,相当于多个数量的0-1背包问题;
2. 可以把每种商品遍历的个数放在0-1背包里面在遍历一遍。

注意点

1. 遍历条件需要变为 j>=k*weight[i],以及递归公式变为dp[j-k * weight[i]] + k * value[i];
2. 因为变为了多个数量的0-1背包问题,所以倒序遍历背包。

代码

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int bagweight = sc.nextInt();
        int n = sc.nextInt();
        int[] weight = new int[n];
        int[] value = new int[n];
        int[] nums = new int[n];
        
        for(int i = 0; i<n; i++) weight[i] = sc.nextInt();
        for(int i = 0; i<n; i++) value[i] = sc.nextInt();
        for(int i = 0; i<n; i++) nums[i] = sc.nextInt();
        
        // 装满容量为j的背包的最大价值为dp[j]
        int[] dp = new int[bagweight+1];
        dp[0] = 0;
        
        for(int i = 0; i<n; i++){
            for(int j = bagweight; j >= weight[i]; j--){
                // 遍历每个物品的个数
                for(int k = 0; k<=nums[i] && j>=k*weight[i]; k++){
                    dp[j] = Math.max(dp[j], dp[j-k * weight[i]] + k * value[i]);
                    
                }
            }
        }
        
        System.out.println(dp[bagweight]);
        
    }
}

http://www.kler.cn/a/534915.html

相关文章:

  • IDEA使用Auto-dev+DeepSeek 10分钟快速集成,让java开发起飞
  • 114,【6】攻防世界 web wzsc_文件上传
  • 通过Python编写的中国象棋小游戏
  • langchain教程-6.TextSplitter/文档切分
  • 数据结构:队列篇
  • [数据结构] 线性表和顺序表
  • 硅基流动与华为云联合推出基于昇腾云的DeepSeek R1amp;V3推理服务
  • 宏观经济:信贷紧缩与信贷宽松、通货膨胀与通货紧缩以及经济循环的四个周期
  • 【分布式理论六】分布式调用(4):服务间的远程调用(RPC)
  • 网站服务器如何御防恶意网络爬虫攻击?
  • ALU与寄存器设计与运算优化
  • graylog初体验
  • iOS 音频录制、播放与格式转换
  • Linux常见问题解决方法--2
  • k8s中,一.pod污点,二.pod容器污点容忍策略,三.pod优先级(PriorityClass类)
  • 深度学习 | 表示学习 | 卷积神经网络 | Batch Normalization 在 CNN 中的示例 | 20
  • RFID隧道机:提升生产流水线效率与精准度
  • 【Java报错解决】警告: 源发行版 11 需要目标发行版 11
  • 教育系统软件正版化:信创替换的加速引擎
  • Linux里的容器被OOM killed的两种情况
  • 100.8 AI量化面试题:如何使用自监督学习方法从原始市场数据中挖掘新的alpha因子?
  • 我用Ai学Android Jetpack Compose之CircularProgressIndicator
  • MongoDB学习笔记-解析jsonCommand内容
  • Unix/Linux编程:fcntl函数总结
  • vscode 如何通过Continue引入AI 助手deepseek
  • 国产编辑器EverEdit - 自定义标记使用详解