代码随想录算法训练营第四十八天(动态规划篇之01背包)| 1049. 最后一块石头的重量Ⅱ,494. 目标和

1049. 最后一块石头的重量Ⅱ

题目链接:1049. 最后一块石头的重量 II - 力扣(LeetCode)

思路

尽量将石头分为重量相同的两堆,这样两堆中的石头相撞之后剩下的石头就会最小。根据之前的01背包理论:

代码随想录算法训练营第四十五天(动态规划篇)|01背包-CSDN博客

代码随想录算法训练营第四十六天(动态规划篇)|01背包(滚动数组方法)-CSDN博客

可以设背包容量为石头重量总和的一半,求它所能装的最大价值,之后就能得到最后所剩的石头。

代码实现

class Solution(object):def lastStoneWeightII(self, stones):G1 = sum(stones)//2   G2 = sum(stones) - G1 dp = [0] * (G1 + 1)for num in stones:for j in range(G1, num - 1, -1):dp[j] = max(dp[j], dp[j - num] + num)return (G1 - dp[G1] + G2) - dp[G1]# e.g.  分为33,34两堆,如果容量为33的背包所装的最大价值为31,那相撞后的那块石头质量为(33 - 31 + 34) - 31

494. 目标和

题目链接:494. 目标和 - 力扣(LeetCode)

思路

把数组里的数分为两部分:前面符号为“+”,即要被加的数,和前面符号为“-”,即要被减的数。设所有参与加法的数和为x,参与减法的数和为y,则x-y = target,x+y=sum,联立得x = (target+sum)/2。因此题目就变成了寻找数组中和为(target+sum)/2的子集总和,转变为01背包问题,即能将容量为(target+sum)/2背包装满的方法。

1. dp数组定义

dp[j]: 将容量为j的背包装满的方法。

2. 递推公式

遍历数组中的数,每遍历到新的数nums[i],相当于新加了一个物体,那么dp[j](能装满容量为j的包的方法)就会发生变化,之前的方法加上当前物体所能贡献的那部分,当前物体可以帮着填充容量为j-nums[i]的包。因此,dp[j]因为nums[i]的到来,多了dp[j-nums[i]]种新方法。

所以递推公式为dp[j] += dp[j-nums[i]]

3. 初始条件

当背包容量为0,有1种方法,即什么都不选,dp[0] = 1

4. 递推顺序

使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒序遍历。

5. 举例推导dp数组

输入:nums:[1, 1, 1, 1, 1], S:3

bagSize = (S + sum) / 2 = (3 + 5) / 2 = 4

dp数组状态变化如下:

对于第一个数字1,只能填满容量为0和容量为1的背包,当考虑到第二个1时,可能填满的背包容量为1到S = 3。如果要填满容量为3的背包,就要看看已有的物体有多少种填满容量为2的包的方法,但没有(dp[2] = 0),所以dp[3]只能保持为0。但新加入的物体1可以帮着填满容量为2的包,因为之前已经有一种方法可以装满容量为1的包了,因此dp[2] = 1。

代码实现

class Solution(object):def findTargetSumWays(self, nums, target):if abs(target) > sum(nums):   # 对于nums,最大能得到的数是全体非负整数相加,最小是最大值的负数,如果target超过次范围,则没有方法。return 0if (target + sum(nums))%2 == 1:return 0x = (sum(nums) + target)/2dp = [0] * (x + 1)dp[0] = 1for num in nums:for j in range(x, num - 1, -1):dp[j] += dp[j - num]return dp[x]

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

svg基础(五)滤镜-高斯模糊,混合模式,偏移,颜色变换

1 作用 滤镜用于对SVG图形增加特殊效果 2 效果 feBlend - 与图像相结合的滤镜feColorMatrix - 用于彩色滤光片转换feComponentTransferfeCompositefeConvolveMatrixfeDiffuseLightingfeDisplacementMapfeFloodfeGaussianBlur 高斯模糊feImagefeMergefeMorphologyfeOffset - …

Spring Boot 笔记 005 环境搭建

1.1 创建数据库和表(略) 2.1 创建Maven工程 2.2 补齐resource文件夹和application.yml文件 2.3 porn.xml中引入web,mybatis,mysql等依赖 2.3.1 引入springboot parent 2.3.2 删除junit 依赖--不能删,删了会报错 2.3.3 引入spring web依赖…

[算法学习]

矩阵乘法 只有当左矩阵列数等于右矩阵行数,才能相乘N*M的矩阵和M*K的矩阵做乘法后矩阵大小为N*k矩阵乘法规则:第一个矩阵A的第 i 行与第二个矩阵的第 j 列的各M个元素对应相乘再相加得到新矩阵C[i][j]的值 整除 同余 同余的性质 线性运算,…

管理就是闭环

管理是什么?这个问题没有一个统一的答案。本文提供一个管中窥豹的答案:管理就是闭环。 作为基层管理者,日常管理事务,一个是目标闭环,一个是执行闭环。这分别对应敏捷PO和Scrum Master的职责。PO的职责是确保目标闭环&…

提升幸福感,中国的龙!理性看待个人发声——早读

打了过年球,爽! 引言代码第一篇 人民日报 【夜读】新的一年,提升幸福感的6件小事第二篇 茶百道的广告文第三篇 人民日报 热搜第一!《山河诗长安》,太燃了第四篇 人民日报 中国有真龙第五篇 人民日报 来啦 新闻早班车要…

Debezium发布历史122

原文地址: https://debezium.io/blog/2022/05/04/switch-to-java-11/ 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. Switching to Java 11/17 May 4, 2022 by Vojtěch Jurnek community news 你可…

初步探索Pyglet库:打造轻量级多媒体与游戏开发利器

目录 pyglet库 功能特点 安装和导入 安装 导入 基本代码框架 导入模块 创建窗口 创建控件 定义事件 运行应用 程序界面 运行结果 完整代码 标签控件 常用事件 窗口事件 鼠标事件 键盘事件 文本事件 其它场景 网页标签 音乐播放 图片显示 祝大家新…

【vscode】在vscode中如何导入自定义包

只需要额外添加这两条语句即可: import os,sys sys.path.append("../..") 需要注意的是,ipynb 文件打开的工作目录是文件本身的路径,而 py 文件打开的工作路径是 vscode 打开的路径。 相比较而言 pycharm 中创建好项目之后并不…

ubuntu20.04 安装mysql(8.x)

安装mysql命令 sudo apt-get install mysql-server安装完毕后,立即初始化密码 sudo mysql -u root # 初次进入终端无需密码ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY yourpasswd; # 设置本地root密码设置mysql远程登录 设置远程登录账…

【开源】基于JAVA+Vue+SpringBoot的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

C++进阶——C++11(右值引用)

一、右值 VS 左值 官方定义是,可以直接取得到地址的对象就是左值,而不能取地址的对象就是右值。但按我的理解来说,如果这个对象是有名字(变量名)的,那就是左值;而除常量数组之外,如…

第206篇| 新年有趣的产品发现;所谓正确的价值观

这是2024年一月份flomo和notion 上聚合的系列文章之(02); 具体方法用的是这个 : 【知识沙虫,一个简单易用的知识体系建模工具】https://mp.weixin.qq.com/s/V2Cdq-1PbMQYvpE4o9NLpQ 首先,方法用下来还是很…

人工智能能产生情绪吗?

此图片来源于网络 一、人情绪的本质是什么? 人的情绪本质是一个复杂的现象,涉及到生理、心理和社会的多个层面。以下是关于情绪本质的几种观点: 情绪的本质是生命能量的表达。情绪被认为是生命能量的一种体现,通过情绪的体验和…

【踏雪无痕的痕二】——小学一年级数学题窥探蝴蝶效应

目录 一、背景介绍二、思路&方案三、过程1.结果一致过程不一致带来的偏差2.再举两个例子,你品一品3.我曾经的培养计划背后的"力量"?4.蝴蝶效应——混沌或非线性理论什么是蝴蝶效应? 5.内心深处的小恶魔(人性的使然) 四、总结 一…

春节假期:思考新一年的发展思路

春节假期是人们放松身心、享受家庭团聚的时刻,但除了走亲戚、玩、吃之外,我们确实也需要思考新的一年的发展思路。以下是一些建议,帮助您在春节假期中为新的一年做好准备: 回顾过去,总结经验:在春节期间&a…

react中hook封装一个table组件 与 useColumns组件

目录 1:react中hook封装一个table组件依赖CommonTable / index.tsx使用组件效果 2:useColumns组件useColumns.tsx使用 1:react中hook封装一个table组件 依赖 cnpm i react-resizable --save cnpm i ahooks cnpm i --save-dev types/react-r…

系统架构24 - 软件架构设计(3)

软件架构风格(上) 概述架构风格数据流架构风格批处理风格管道-过滤风格 调用/返回架构风格主程序/子程序风格面向对象风格层次结构风格客户端/服务器风格 以数据为中心的架构风格仓库风格黑板风格 虚拟机架构风格解释器风格规则系统风格 独立构件架构风格…

React - 分页插件默认是英文怎么办

英文组件的通用解决方案 这里以分页插件为例: 大家可以看到,最后的这个页面跳转提示文字为Go to,不是中文,而官网里面的案例则是: 解决方案: import { ConfigProvider } from antd; import zhCN from an…

ShardingSphere 5.x 系列【7】元数据持久化

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 概述2. 单机模式2.1 H22.2 MySQL3. 集群模式3.1 ZooKeeper3.2 Nacos3.3 Cons…

【大厂AI课学习笔记】【1.5 AI技术领域】(10)对话系统

对话系统,Dialogue System,也称为会话代理。是一种模拟人类与人交谈的计算机系统,旨在可以与人类形成连贯通顺的对话,通信方式主要有语音/文本/图片,当然也可以手势/触觉等其他方式 一般我们将对话系统,分…