LeetCode 2312.卖木头块:动态规划(DP)

【LetMeFly】2312.卖木头块:动态规划(DP)

力扣题目链接:https://leetcode.cn/problems/selling-pieces-of-wood/

给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。同时给你一个二维整数数组 prices ,其中 prices[i] = [hi, wi, pricei] 表示你可以以 pricei 元的价格卖一块高为 hi 宽为 wi 的矩形木块。

每一次操作中,你必须按下述方式之一执行切割操作,以得到两块更小的矩形木块:

  • 沿垂直方向按高度 完全 切割木块,或
  • 沿水平方向按宽度 完全 切割木块

在将一块木块切成若干小木块后,你可以根据 prices 卖木块。你可以卖多块同样尺寸的木块。你不需要将所有小木块都卖出去。你 不能 旋转切好后木块的高和宽。

请你返回切割一块大小为 m x n 的木块后,能得到的 最多 钱数。

注意你可以切割木块任意次。

 

示例 1:

在这里插入图片描述

输入:m = 3, n = 5, prices = [[1,4,2],[2,2,7],[2,1,3]]
输出:19
解释:上图展示了一个可行的方案。包括:
- 2 块 2 x 2 的小木块,售出 2 * 7 = 14 元。
- 1 块 2 x 1 的小木块,售出 1 * 3 = 3 元。
- 1 块 1 x 4 的小木块,售出 1 * 2 = 2 元。
总共售出 14 + 3 + 2 = 19 元。
19 元是最多能得到的钱数。

示例 2:

输入:m = 4, n = 6, prices = [[3,2,10],[1,4,2],[4,1,3]]
输出:32
解释:上图展示了一个可行的方案。包括:
- 3 块 3 x 2 的小木块,售出 3 * 10 = 30 元。
- 1 块 1 x 4 的小木块,售出 1 * 2 = 2 元。
总共售出 30 + 2 = 32 元。
32 元是最多能得到的钱数。
注意我们不能旋转 1 x 4 的木块来得到 4 x 1 的木块。

 

提示:

  • 1 <= m, n <= 200
  • 1 <= prices.length <= 2 * 104
  • prices[i].length == 3
  • 1 <= hi <= m
  • 1 <= wi <= n
  • 1 <= pricei <= 106
  • 所有 (hi, wi) 互不相同 。

方法一:动态规划(DP)

dp[i][j]代表大小为i × j的木块的最大价值。

初始值:若给定的大小为m × n的木块的售卖价格为p则令dp[m][n] = p;否则dp[i][j] = 0

转移方程:

  • 对于横着切的方法:dp[i][j] = max(dp[i][j], dp[i - k][j] + dp[k][j])(其中 1 ≤ k ≤ ⌊ i 2 ⌋ 1\leq k\leq \lfloor \frac{i}{2} \rfloor 1k2i
  • 对于竖着切的方法:dp[i][j] = max(dp[i][j], dp[i][j - k] + dp[i][k]);(其中 1 ≤ k ≤ ⌊ j 2 ⌋ 1\leq k\leq \lfloor \frac{j}{2} \rfloor 1k2j

最终返回dp[m][n]即为答案。

  • 时间复杂度 O ( m n ( m + n ) ) O(mn(m+n)) O(mn(m+n))
  • 空间复杂度 O ( m n ) O(mn) O(mn)

AC代码

C++
typedef long long ll;
class Solution {
public:ll sellingWood(int m, int n, vector<vector<int>>& prices) {vector<vector<ll>> dp(m + 1, vector<ll>(n + 1));for (vector<int>& price : prices) {dp[price[0]][price[1]] = price[2];}for (int i = 1; i <= m; i++) {for (int j = 1; j <= n; j++) {for (int k = 1; k <= i / 2; k++) {dp[i][j] = max(dp[i][j], dp[i - k][j] + dp[k][j]);}for (int k = 1; k <= j / 2; k++) {dp[i][j] = max(dp[i][j], dp[i][j - k] + dp[i][k]);}}}return dp[m][n];}
};
Python
from typing import Listclass Solution:  # AC,96.77%,100.00%def sellingWood(self, m: int, n: int, prices: List[List[int]]) -> int:dp = [[0] * (n + 1) for _ in range(m + 1)]for x, y, p in prices:dp[x][y] = pfor i in range(1, m + 1):for j in range(1, n + 1):dp[i][j] = max(dp[i][j],max((dp[i - k][j] + dp[k][j] for k in range(1, i // 2 + 1)), default=0),  # 这里必须加上default,否则可能会变成max(())max((dp[i][j - k] + dp[i][k] for k in range(1, j // 2 + 1)), default=0))return dp[m][n]

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136747100

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

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

相关文章

【蓝桥杯】蓝桥杯嵌入式——题目总结及文章汇总(内含客观题与主观题,并且都附有详细题解)

介绍 蓝桥杯嵌入式比赛是一项专注于嵌入式开发的全国性比赛&#xff0c;旨在鼓励和促进嵌入式系统的研究和应用&#xff0c;提高嵌入式开发的水平和技能。 比赛分为初赛和复赛两个阶段。初赛难度适中&#xff0c;注重考查参赛选手的嵌入式系统开发能力和实践经验。复赛则采用线…

LeetCode118 杨辉三角形

题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]] 解…

汽车电子拓扑架构的演进过程

汽车电子拓扑架构的演进过程 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠…

TestNg @Test的expectedExceptionsMessageRegExp属性

本文将讨论TestNG中Test 注解的expectedExceptionsMessageRegExp属性。 这个属性有什么作用&#xff1f;根据文档&#xff1a; 如果指定了expectedExceptions &#xff0c;则其消息必须与此属性中指定的正则表达式匹配。 因此&#xff0c;这意味着如果不先使用expectedparam…

爬虫加密算法

js常见的加密方式 加密在前端开发和爬虫中是经常遇见的。掌握了加密算法且可以将加密的密文进行解密破解的&#xff0c;也是你从一个编程小白到大神级别质的一个飞跃。且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向。下述只把我们常用的加密方法进行总结。不去深…

若依ruoyi-vue中的的DTO、VO、BO、PO、DO、POJO

POJO POJO的定义是无规则简单的对象&#xff0c;在日常的代码分层中pojo会被分为VO、BO、 PO、 DTO VO &#xff08;view object/value object&#xff09;表示层对象 1、前端展示的数据&#xff0c;在接口数据返回给前端的时候需要转成VO 2、个人理解使用场景&#xff0c;接…

Python 常用的开源爬虫库介绍

Python 是一种广泛使用的编程语言&#xff0c;特别是在 Web 爬虫领域。有许多优秀的开源爬虫库可以帮助开发者高效地抓取网页内容。以下是几个常用的 Python 爬虫库及其特点和优势&#xff1a; BeautifulSoup 特点 - **HTML/XML 解析**&#xff1a;BeautifulSoup 是一个…

linux(Ubuntu22) 一篇带你学会Linux,详细篇

Linux 简介 精通Linux&#xff0c;自带python&#xff0c;系统开源 电脑可安装双系统 c盘安装win D盘安装linux 在一套硬件上只能同时运行一个操作系统 虚拟机 模拟真实环境 在虚拟机内运行操作系统 需要硬件支持虚拟化 开启VT-X VM…

opengl程序错误,无法定位程序输入点 glewGetErrorString@4 于动态链接库

使用mingw编译器编译运行opengl程序&#xff0c;编译通过运行时崩溃 怀疑是之前的mingw版本编译的glew库版本不对&#xff0c;又重新编译一遍&#xff0c;还是这个错误 之后检查环境变量配置&#xff0c;发现有两个glew的路径&#xff0c;一个是msvc版的&#xff0c;另一个是m…

JavaScript 语法-对象

对象 JavaScript 中的对象是一组键值对的集合&#xff0c;其中每个键都是字符串&#xff0c;每个值可以是任意类型。 对象是由一些属性和方法组成的集合&#xff0c;属性可以用来存储数据&#xff0c;方法可以用来操作数据。 属性和方法使用“.”来访问 // 创建一个对象 let …

教你把公司吃干抹净、榨干带走

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答 正文 打工人一定要做到够自私&#xff0c;把公司的一切为我所用&#xff0c;你要知道闷头打工是没有出路的。聪明的人会以最快的速度榨干带走公司的一切资源、人脉、技能&#xff0c;为…

五种主流数据库:数据汇总

汇总分析是数据报表中的基本功能&#xff0c;例如产品销售金额的汇总、学生的平均身高和标准差统计等。SQL 定义了聚合函数&#xff0c;可以实现数据的汇总分析。 本文比较五种主流数据库支持的常见聚合函数&#xff0c;包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLi…

【C++PCL】点云处理RANSAC配准

目录 1.原理介绍 2.代码效果 3.源码展示 4.参数调试 5.注意事项

Unity WebGL服务器标头的问题

目录 现象&#xff1a; 报错文本: 原因: 解决方案: 现象&#xff1a; 打包前&#xff0c;ProjectSetting 压缩选项设置为Brotli, 将打包的WebGL部署到阿里云OSS环境后&#xff0c;运行弹框提示错误. 报错文本: Unable to parse Build/WebGL.framework.js.br! This canha…

二、Jooq整合SpringBoot

在当前微服务盛行的情况下&#xff0c;Spring Boot 或 Spring Cloud 为基础的微服务体系是主流&#xff0c; 也是目前业务场景中新的选型方向 数据库表 -- filesystem.user definitionCREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(50) NOT NULL,…

三级等保技术建议书

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

QT----基于QT的人脸考勤系统

目录 1 编译opencv库1.1 下载源代码1.2 qt编译opencv1.3 执行Cmake一直卡着data: Download: face_landmark_model.dat 2 编译SeetaFace2代码2.1 遇到报错By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has2.2遇到报错Model missing 3 测试…

洛谷 保龄球

保龄球 题目描述 DL 算缘分算得很烦闷&#xff0c;所以常常到体育馆去打保龄球解闷。因为他保龄球已经打了几十年了&#xff0c;所以技术上不成问题&#xff0c;于是他就想玩点新花招。 DL 的视力真的很不错&#xff0c;竟然能够数清楚在他前方十米左右每个位置的瓶子的数量…

sqllab通关笔记(汇总)

第一关&#xff1a; Sqllab第一关通关笔记-CSDN博客 第二关&#xff1a; sqllab第二关通关笔记-CSDN博客 第三关&#xff1a; sqllab第三关通关笔记-CSDN博客 第四关&#xff1a; sqllab第四关通关笔记-CSDN博客 第五关&#xff1a; sqllab第五关通关笔记-CSDN博客 第…

web高可用集群(nginx负载均衡+keepalived实现调度器HA)

web高可用集群(nginx负载均衡keepalived实现调度器HA&#xff09; 主机IP地址代理服务器192.168.88.66代理服务器192.168.88.38Real server192.168.88.10Real server192.168.88.20 配置俩台Real server [rootweb1 ~]# vim /etc/yum.repos.d/nginx.repo [rootweb1 ~]# cat /e…