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

[AcWing]-多重背包问题-动态规划

目录

一、题目描述

二、整体思路

三、代码


一、题目描述

题目地址

二、整体思路

        和完全背包问题唯一不同的是物品的件数不再是无限了,而是有限的。那么只需要在完全背包问题的基础上把最大遍历次数k变成物品总件数Si和当前背包能放入物品的最大件数j/volume[i]两者取其小即可。

三、代码

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];int[] finite=new int[m+1];for(int i=1;i<=m;i++){int vi=scanner.nextInt();int wi=scanner.nextInt();int si=scanner.nextInt();volume[i]=vi;value[i]=wi;finite[i]=si;}System.out.print(dynamatic(m,n,volume,value,finite));}public static int dynamatic(int m,int n,int[] volume,int[] value,int[] finite){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=Math.min(finite[i],j/volume[i]);//两者取其小for(int l=0;l<=k;l++){dp[i][j]=Math.max(dp[i][j],dp[i-1][j-l*volume[i]]+l*value[i]);}}}}return dp[m][n];} 
}


http://www.mrgr.cn/news/18571.html

相关文章:

  • ClickHouse 二进制特征值怎么转化为字符串
  • (第四十一天)
  • Mulesoft 开发笔记
  • 2024爆火全网大模型书籍:《从零构建大型语言模型》星标17.8k
  • 《云原生安全攻防》-- K8s攻击案例:高权限Service Account接管集群
  • 海光物理机CPU压测记录
  • 【深度解析】GPT-3.5、GPT-4.0、GPT-4o mini的区别,你了解多少?
  • 改变地址栏的网址链接路径或传参,不刷新当前网页页面
  • 推荐一个非常实用的在线工具网:115工具网----一个提供高效、实用、方便的在线工具集合网站
  • Vue(十三) 路由、路由嵌套、query、param传参、propos、replace属性。编程式路由导航,特有的生命周期函数,路由守卫
  • 华为OD机试 - 猜数字 - 穷举搜索(Java 2024 E卷 100分)
  • 了解Python中如何实现多线程,并讨论GIL的影响
  • CPU性能对比 Intel 海光 鲲鹏920 飞腾2500
  • 《LeetCode 热题 100》
  • 多模态大模型中,融合后如何知道最终结果受哪种模态影响更大?
  • 12、Django Admin在列表视图页面上显示计算字段
  • 哪个编程工具让你的工作效率翻倍?
  • 【Navicat】数据可视化工具激活
  • Vue笔记总结(Xmind格式):第六天
  • 8_29_QCalendarWidget