算法刷题-动态规划3(未完待续---------

news/2025/2/6 4:02:07/

算法刷题-动态规划3)

  • 01背包问题
  • 最后一块石头的重量

01背包问题

一篇文章吃透背包问题
大佬讲解什么是背包问题

问题分析:
面对这么多的物品,
选择一个个地来装入背包,背包的承重量不断地增加,二维数组中,列为物品i,行为背包的承重量)。
当物品 i 的重量大于背包当前的总承重时,该物品不能放入背包;
当物品 i 的重量小于背包的总承重时,我们就要进行对比,前面 i - 1个物品所带来的价值和现在要取出背包中
的一部分物品用来存放物品i带来的价值,哪个更大?(取出多少呢,当然是刚好能放下物品 i 的重量,即w[i]),
把更大的那个价值对当前背包价值进行更新。

在这里插入图片描述
在这里插入图片描述

  • arr[ i ][ j ] = max(arr[ i - 1 ][ j ], arr[ i - 1][ j - w[ i ] ] + v[ i ])
    在这里插入图片描述
for(int i=1;i<=n;i++)//物品i 
{for(int j=1;j<=c;j++)//重量j {if(j>=w[i]){arr[i][j]=max(arr[i-1][j],arr[i-1][j-w[i]]+v[i]);	}else arr[i][j]=arr[i-1][j];}
}public static int knapsack(int[] C, int[] W, int V, int N) {// 初始化dp数组,dp[i][j]表示前i个物品,背包容量为j时的最大价值int[][] dp = new int[N + 1][V + 1];// 当背包容量为0时,无论有多少物品,最大价值都为0for (int i = 0; i <= N; i++) {dp[i][0] = 0;}// 当没有物品可选时,无论背包容量有多少,最大价值都为0for (int j = 0; j <= V; j++) {dp[0][j] = 0;}// 填充dp数组,从前往后遍历每个物品,从小到大遍历背包容量for (int i = 1; i <= N; i++) {for (int j = 1; j <= V; j++) {// 如果当前物品的重量小于等于背包容量,可以考虑将其放入背包if (j >= W[i - 1]) {// 如果放入当前物品,可以得到的最大价值比不放入当前物品的最大价值更高,则放入当前物品dp[i][j] = Math.max(dp[i - 1][j], dp[i - 1][j - W[i - 1]] + C[i - 1]);} else {// 如果当前物品的重量大于背包容量,无法放入背包,最大价值等于上一个物品的最大价值  dp[i][j] = dp[i - 1][j];  }}}// 返回最大价值,即dp[N][V]  return dp[N][V];  
}

分割等和子集

(待回顾和复习)美好的一天从每日一题开死
在这里插入图片描述

题目讲解

class Solution {//看不懂先去看二维数组解法public boolean canPartition(int[] nums) {int len=nums.length;  int sum=0;  for(int i=0;i<len;i++){  sum+=nums[i];  }if(sum%2!=0) return false;  //背包容量为总和的一半  int target=sum/2;  //dp[j]:容量为j时可放入物品的最大价值  int[] dp=new int[target+1];  for(int i=0;i<len;i++){  for(int j=target;j>=nums[i];j--){  dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i]);  }}return dp[target]==target;  }
}

最后一块石头的重量

在这里插入图片描述


http://www.ppmy.cn/news/1246475.html

相关文章

【Web】[GKCTF 2021]easycms

直接点击登录按钮没有反应 扫目录扫出来/admin.php 访问 弱口令admin 12345直接登录成功 点开设计--主题--自定义 编辑页头&#xff0c;类型选择php源代码 点保存显示权限不够 设计--组件--素材库 先随便上传一个文件&#xff0c;之后改文件名称为../../../../../system/tmp…

log4j2的记录流程介绍(附log4j2日志的xml配置文件)

log4j2日志的xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <!--Configuration后面的status&#xff0c;这个用于设置log4j2自身内部的信息输出&#xff0c;可以不设置&#xff0c;当设置成trace时&#xff0c;你会看到log4j2内部各种详细…

西南科技大学C++程序设计实验一(C++基础知识)

目录 一、实验目的 二、实验任务 三、预习内容(复习书中前3章内容,说明C++相对于C的扩展有哪些?) 四、问题思考与讨论 一、实验目的 1.熟悉编程环境 2.掌握程序调试方法。 3.熟悉枚举类型、结构体类型等自定义数据类型的使用 4.熟悉函数的定义、说明与使用 5.熟悉引用…

js moment时间范围拿到中间间隔时间

2023.11.27今天我学习了如何对只返回的开始时间和结束时间做处理&#xff0c;比如后端返回了&#xff1a; [time:{start:202301,end:202311}] 我们需要把中间的间隔渲染出来。 [202301,202302,202303,202304,202305,202306,202307,202308,202309,202310,202311] 利用moment…

Leetcode刷题之设计循环队列(C语言版)

Leetcode刷题之设计循环队列&#xff08;C语言版&#xff09; 一、题目描述二、题目示例三、题目解析Ⅰ、typedef structⅡ、MyCircularQueue* myCircularQueueCreate(int k)Ⅲ、bool myCircularQueueIsEmpty(MyCircularQueue* obj)Ⅳ、bool myCircularQueueIsFull(MyCircularQ…

怎么把dwg格式转换pdf?

怎么把dwg格式转换pdf&#xff1f;DWG是一种由AutoCAD开发的二维和三维计算机辅助设计&#xff08;CAD&#xff09;文件格式&#xff0c;它的名称是“绘图&#xff08;Drawing&#xff09;”的缩写。DWG文件通常包含了设计图纸、模型和元数据等信息&#xff0c;并且被广泛用于工…

DHCP协议及实验omnipeek抓包工具分析 IPv4协议

一 抓包命令 adb shell tcpdump -i wlan0 -w /data/tcpdump.pcap 抓包后截图如下 二 DHCP是什么 2.1 DHCP定义 DHCP( Dynamic Host Configuration Protocol, 动态主机配置协议)定义: 存在于应用层(OSI) 前身是BOOTP(Bootstrap Protocol)协议 是一个使用UDP(User …

flutter的TextField参数、案例整理(上)

TextField 概述 TextField 用于文本输入 构造函数 const TextField({Key key,this.controller, this.focusNode,this.decoration const InputDecoration(),TextInputType keyboardType,this.textInputAction,this.textCapitalization TextCapitalization.none,this.style…