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

[AcWing]-完全背包问题-动态规划

目录

一、题目描述

二、整体思路

三、代码


一、题目描述

题目地址

二、整体思路

        和01背包问题基本一样,唯一不同的是每件物品可以取无限次。

        dp数组的设置是一样的,在选择是否放入第i件物品时,物品体积大于背包当前容量的情况和01背包问题一样。所不同的是这件物品要取多少次。那么可以遍历最大放入次数,找出最大的总价值的情况。注意遍历过程中要更新dp[i][j]

三、代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int m=scanner.nextInt();
        int n=scanner.nextInt();
        int[] volume=new int[m+1];
        int[] value=new int[m+1];
        for(int i=1;i<=m;i++){
            int vi=scanner.nextInt();
            int wi=scanner.nextInt();
            volume[i]=vi;
            value[i]=wi;
        }
        System.out.print(dynamatic(m,n,volume,value));
    }
    public static int dynamatic(int m,int n,int[] volume,int[] value){
        int[][] dp=new int[m+1][n+1];
        for(int i=0;i<=n;i++){
            dp[0][i]=0;
        }
        for(int j=0;j<=m;j++){
            dp[j][0]=0;
        }
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                if(volume[i]>j){
                    dp[i][j]=dp[i-1][j];
                }else{
                    int k=j/volume[i];//该物品能放入的最多次数
                    for(int l=0;l<=k;l++){//遍历过程中要更新dp[i][j]
                        dp[i][j]=Math.max(dp[i][j],dp[i-1][j-l*volume[i]]+l*value[i]);
                    }
                    
                }
                
            }
        }
        return dp[m][n];
    } 
}


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

相关文章:

  • STM32设计学生宿舍监测控制系统
  • 软件工程笔记二—— 软件生存期模型
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • K8资源之endpoint资源EP资源
  • Electron 项目启动外部可执行文件的几种方式
  • Unity3D学习FPS游戏(12)敌人检测和攻击玩家
  • RabbitMQ的TLL
  • Mac OS X 如何升级系统自带的 Ruby
  • 教程:使用显卡MX250做YOLO目标检测(定位)滑块缺口,包括获取数据集,对数据集手动标注,训练的代码,推理的代码,超多细节,你的第一次YOLO绝佳体验!
  • 微信小程序认证和备案
  • 比特币详解
  • (大三上_游戏开发设计模式_上课_1)多态练习_计算机
  • CUDA编程08 - 并行编程思维
  • 【React 简化路由的生成的方式
  • kafka3.7.1 单节点 KRaft部署测试发送和接收消息
  • 深入解析FPGA在SOC设计中的核心作用
  • 深入探讨Java中的分布式事务管理:实现、挑战与最佳实践
  • 超声波的应用
  • 【python计算机视觉编程——4.照相机模型与增强现实】
  • sqlite3的db.wait方法:等待所有查询完成
  • PyQt6 / PySide 6 实现可拖拽的多标签页 web 浏览器【1】(有 Bug)
  • Ansible 自动化运维项目
  • 如何在Mac上使用VMware配置Windows虚拟机
  • C#绘制常用工业控件(仪表盘,流动条,开关等)
  • 浅谈分库分表的“读扩散”问题
  • 第二十章 rust多平台编译