算法-动态规划-完全背包

news/2024/9/20 22:34:14/文章来源:https://www.cnblogs.com/hifrank/p/18386390

0. 动态规划五部曲:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

img

1. 完全背包问题

完全背包问题中,每个物品都有无数个可以重复选择

  • 二维dp数组
    int[][] dp = new int[n][totalWeight+1];
    for(int i = 0; i<n; ++i) {for(int j = 0; j<= totalWeight; ++j) {if(j < weight[i])dp[i][j] = dp[i-1][j];else // 01背包是dp[i-1][j-weight[i]]+value[i],一个物品不能重复选dp[i][j] = Math.max(dp[i-1][j], dp[i][j-weight[i]]+value[i]);}
    }
    
  • 一维dp数组:顺序遍历,允许同种物品被重复选择。
        int[] dp = new int[totalWeight+1];for(int i = 0; i<n; ++i) {for(int j = weight[i]; j<=totalWeight; ++j) {dp[j] = Math.max(dp[j], dp[j-weight[i]] + value[i]);}}
    
import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int totalWeight = scanner.nextInt();int[] weight = new int[n];int[] value = new int[n];for(int i = 0; i<n; ++i) {weight[i] = scanner.nextInt();value[i] = scanner.nextInt();}int[] dp = new int[totalWeight+1];for(int i = 0; i<n; ++i) {// 顺序遍历,同一个物品可以重复选for(int j = weight[i]; j<=totalWeight; ++j) {dp[j] = Math.max(dp[j], dp[j-weight[i]]+value[i]);}}System.out.println(dp[totalWeight]);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/789049.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Clion\+OpenCV(C\+\+版)开发环境配置教程Win/Mac

合集 - 环境配置(2)1.最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!08-282.最简最速!C++版OpenCV安装配置教程Win/Mac!!!08-28收起 Clion+OpenCV(C++版)开发环境配置教程Win/Mac 平时在学习和比赛的时候都是使用的Python版本的OpenCV,最近遇到了一个项目使用的上…

开源活动预告|抖音集团专家聚焦电商、PB级实时场景带来数据技术分享

⌈ Apache Doris 城市行 Meetup ⌋ 第四站北京活动,正在火热报名。8 月 31 日 13:30,ApacheDoris x 字节跳动开源联合 Meetup 北京站即将开启。多位来自抖音集团的数据工程师,将聚焦电商场景、PB级实时场景,带来数据技术实战分享。现场参会名额有限,感兴趣的同学抓紧报名占…

TimeWheel算法介绍及在应用上的探索

作者:来自 vivo 互联网服务器团队- Li Fan本文从追溯时间轮算法的出现,介绍了时间轮算法未出现前,基于队列的定时任务实现,以及基于队列的定时任务实现所存在的缺陷。接着我们介绍了时间轮算法的算法思想及其数据结构,详细阐述了三种时间轮模型的数据结构和优劣性。 再次,…

再推2款底层源码调试工具ILSpy和dotPeek

ILSpy_binaries_8.2.0.7535-x64 https://github.com/icsharpcode/ILSpy/releases 和 JetBrains dotPeek 2024.2.2 https://www.jetbrains.com.cn/decompiler/ 都免费

模拟退火模型 —— 入门案例

简介 模拟退火算法(Simulated Annealing, SA) 是一种概率型全局优化算法,它受到物理退火过程的启发。在固体材料的退火过程中,材料被加热到一定温度后缓慢冷却,其内部结构逐渐趋于稳定,最终达到能量最低的平衡状态。模拟退火算法正是模仿这一过程,用于寻找数学问题中的全…

HarmonyOS SDK实况窗服务

HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时刻向用户展示最新的信息动态,用户也可以点击实况窗卡片或胶囊进…

通讯协议

UART通用异步收发器,串行、全双工、异步通信总线。重点是异步,和同步相对应,意思是不需要同步的时钟,通信两端预先约定好波特率(每秒传多少bit),而不是由时钟触发的。波特率:用于描述UART通信时的通信速度,其单位为bps 即每秒钟传送的bit的数量。串口一次发送一个字节…

Oracle同一台服务器创建多个数据库

有时候我们需要再同一台机器上创建多个数据库服务(不是单纯的数据库实例),每一个数据库可以有单独的服务运行,只是在一个机器环境而已。可以在不同的端口上监听,也可以在相同端口监听创建多个数据库步骤 安装完Oracle数据库后,会自动安装很多工具,这里我们使用Database …

kubeflow部署与主要功能使用方案

本文简要介绍kubeflow,以及他的部署使用方式。最近在调研kubeflow平台,发现网上资料较少,加上它版本迭代较快有些调用使用方式变化,由于工作内容相关跑通了一些他的主要功能如katib参数调优,kubeflow pipline搭建,多用户创建等具体案例。 kubeflow介绍 Kubeflow 是一个专…

selenium爬虫学习1

简介 Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。 函数介绍重点方法 1.find_element方法是 Selenium WebDriver 提供的一种用于查找页面上某个…

DCN V2 Improved Deep Cross Network and Practical Lessons for Web-scale Learning to Rank Systems

目录概DCN-v2Wang R., Shivanna R., Cheng D. Z., Jain S., Lin D., Hong L. and Chi E. D. DCN V2: Improved deep & cross network and practical lessons for web-scale learning to rank systems, 2020.概 DCN 的升级版. DCN-v2DCN-v2 的 cross/deep 的结合方式上有上述…

非结构化文档解析

参考:RAG效果优化:高质量文档解析详解知识库 RAG的核心之一就是知识库的离线存储,如何将非结构化文档存储是非常重要的。PDF和Word文件结构word文件解析pdf文件解析Papermage介绍总结阿里云上的文件解析方法示例准确率参考