day166—递归—多边形三角剖分的最低得分(LeetCode-1039)

题目描述

你有一个凸的n边形,其每个顶点都有一个整数值。给定一个整数数组values,其中values[i]是按顺时针顺序i个顶点的值。

假设将多边形剖分n - 2个三角形。对于每个三角形,该三角形的值是顶点标记的乘积,三角剖分的分数是进行三角剖分后所有n - 2个三角形的值之和。

返回多边形进行三角剖分后可以得到的最低分

示例 1:

输入:values = [1,2,3]输出:6解释:多边形已经三角化,唯一三角形的分数为 6。

示例 2:

输入:values = [3,7,4,5]输出:144解释:有两种三角剖分,可能得分分别为:3*7*5 + 4*5*7 = 245,或 3*4*5 + 3*4*7 = 144。最低分数为 144。

示例 3:

输入:values = [1,3,1,4,1,5]输出:13解释:最低分数三角剖分的得分情况为 1*1*3 + 1*1*4 + 1*1*5 + 1*1*1 = 13。

提示:

  • n == values.length
  • 3 <= n <= 50
  • 1 <= values[i] <= 100

解决方案:

这段代码是基于记忆化递归求解 “多边形三角剖分的最低得分” 问题的完整正确实现,核心思路是通过递归拆分多边形为子问题,结合记忆化缓存避免重复计算,最终得到整个多边形三角剖分的最小得分。

核心逻辑

  1. 核心定义

    • memo:二维记忆化数组(len×len),memo[begin][end]缓存顶点区间[begin, end]构成的子多边形三角剖分的最低得分,初始值为0xFFFFFF(标记 “未计算”);
    • dfs(begin, end, s):返回顶点区间[begin, end]三角剖分的最低得分,s为顶点值数组(传引用避免拷贝)。
  2. 递归边界

    • begin+1==end(仅 2 个顶点,无法构成三角形):返回 0(无剖分得分,是问题的基础边界);
    • 主函数补充len<3返回 0(边界防护:顶点数不足 3 时无法剖分,直接返回 0)。
  3. 记忆化优化:递归开始时先检查memo[begin][end]!=0xFFFFFF,若命中缓存(已计算过该区间的最小得分),则直接返回缓存值,避免重复递归计算,将时间复杂度从纯递归的O(2n)降至O(n3)(n为顶点数)。

  4. 核心状态转移(问题本质):枚举分割点ibegin < i < end),将[begin, end]多边形拆分为三个部分:

    • 左子多边形[begin, i]的剖分得分:dfs(begin, i, s)
    • 右子多边形[i, end]的剖分得分:dfs(i, end, s)
    • 当前三角形begin-i-end的得分:s[begin] * s[i] * s[end];总得分是三者之和,通过min取所有分割点对应的最小得分,即为[begin, end]区间的最低剖分得分。
  5. 主函数逻辑:初始化记忆化数组(填充0xFFFFFF标记未计算),调用dfs(0, len-1, values)计算整个多边形(顶点0~len-1)的最低剖分得分并返回。

关键特点

  • 逻辑完整:覆盖了边界条件、记忆化缓存、核心得分计算的所有关键环节,是该问题的标准记忆化递归解法;
  • 效率可控:记忆化缓存彻底避免重复递归,能处理中等规模的顶点数输入;
  • 实现简洁:基于递归框架,贴合 “将大问题拆分为子问题” 的动态规划思想,易理解、易维护。

总结

  1. 核心思路:通过递归枚举所有分割点,将大多边形拆分为子多边形 + 三角形,取所有剖分方式的得分最小值,结合记忆化缓存优化效率;
  2. 关键设计:memo数组是效率核心,分割点枚举 + 子问题递归 + 得分求和取最小是逻辑核心;
  3. 功能效果:能正确计算任意合法顶点数组的多边形三角剖分最低得分,结果无偏差。

values = [3,7,4,5]为例,代码会枚举分割点i=1i=2,计算所有剖分方式的得分后取最小值 144,返回正确结果。

函数源码:

class Solution { public: vector<vector<int>> memo={}; int dfs(int begin,int end,vector<int>& s){ int min_x=0xFFFFFF; if(begin+1==end) return 0; if(memo[begin][end]!=0xFFFFFF) return memo[begin][end]; for(int i=begin+1;i<end;i++){ min_x=min(min_x,dfs(begin,i,s)+dfs(i,end,s)+s[begin]*s[i]*s[end]); } memo[begin][end]=min_x; return min_x; } int minScoreTriangulation(vector<int>& values) { int len=values.size(); if(len<3)return 0; memo.assign(len,vector<int>(len,0xFFFFFF)); return dfs(0,len-1,values); } };

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

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

相关文章

(新卷,200分)- 数字加减游戏(Java JS Python)

(新卷,200分)- 数字加减游戏&#xff08;Java & JS & Python&#xff09; 题目描述 小明在玩一个数字加减游戏&#xff0c;只使用加法或者减法&#xff0c;将一个数字s变成数字t。 每个回合&#xff0c;小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以…

ThinkPHP框架学习全攻略

好的&#xff0c;学习 ThinkPHP&#xff08;TP&#xff09;框架可以遵循以下系统化的路线&#xff1a; 1. 基础准备 环境搭建&#xff1a;安装 PHP&#xff08;建议 7.4&#xff09;、MySQL/MariaDB、Composer&#xff08;依赖管理工具&#xff09;。框架安装&#xff1a;通过…

Java毕设选题推荐:基于SpringBoot生鲜商城系统基于springboot的蔬菜超市系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设项目:基于springboot的蔬菜超市系统(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

(新卷,200分)- 探索地块建立(Java JS Python)

(新卷,200分)- 探索地块建立&#xff08;Java & JS & Python&#xff09; 题目描述 给一块n*m的地块&#xff0c;相当于n*m的二维数组&#xff0c;每个元素的值表示这个小地块的发电量&#xff1b; 求在这块地上建立正方形的边长为c的发电站&#xff0c;发电量满足目…

Nacos CVE-2021-29442

CVE-2021-29442 是 Nacos 中一个认证绕过 远程代码执行&#xff08;RCE&#xff09; 的高危漏洞&#xff0c;主要影响 Nacos 1.4.1 及以下版本&#xff0c;漏洞的核心原因是&#xff1a; Nacos 默认的鉴权实现存在逻辑缺陷&#xff0c;攻击者可以通过构造特殊的 HTTP 请求头绕…

(新卷,200分)- 去除多余空格(Java JS Python)

(新卷,200分)- 去除多余空格&#xff08;Java & JS & Python&#xff09;题目描述去除文本多余空格&#xff0c;但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标&#xff0c;去除多余空格后刷新关键词的起始和结束下标。条件约束&#xff1a; 1&#xf…

IP地址与端口号

IP地址及编址方式 IP地址基础概念 IP地址的本质 定义&#xff1a;用于唯一标识互联网上设备的逻辑地址结构&#xff1a;采用两级结构&#xff08;网络号 主机号&#xff09;唯一性&#xff1a;在整个互联网范围内是唯一的表示方法&#xff1a;点分十进制记法&#xff08;如…

制造业七大核心系统盘点——ERP、MES、WMS、SCM、PLM、SCADA、QMS

我这几年跑工厂、聊老板、跟信息化负责人沟通&#xff0c;听到最多的一句话不是我们没系统&#xff0c;而是&#xff1a;ERP 上了&#xff0c;车间还是一团乱MES 买了&#xff0c;数据没人信仓库有系统&#xff0c;库存还是对不上系统一堆&#xff0c;但问题一个没少这时候很多…

python之lession7-迭代器和生成器

案例一&#xff1a;迭代器访问 import syslist[1,2,3,4] it iter(list) while True:try:print(next(it))except StopIteration:sys.exit()案例二&#xff1a;使用class类创建一个迭代器 class MyNumbers:def __iter__(self):self.a 1return selfdef __next__(self):x self.a…

【毕业设计】基于springboot的蔬菜超市系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

DuCsps.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

Java毕设项目推荐-基于SpringBoot+vue的保险公司人力资源管理系统基于springboot的寿险公司人力资源管理系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

linux Page Table 和 TLB 操作总结

以下是 Linux 内核中与页表和 TLB 操作对应的主要 API/函数列表&#xff0c;结合上述操作分类&#xff1a;页表&#xff08;Page Table&#xff09;相关 API 1. 地址转换操作内核 API/函数说明虚拟地址→物理地址virt_to_phys()、__pa()内核虚拟地址转物理地址物理地址→虚拟地…

【观成科技】C2框架AdaptixC2加密流量分析

工具介绍 AdaptixC2 是一款设计简洁、灵活且易于定制的命令与控制 (C2) 框架。与复杂且臃肿的大型 C2 平台不同&#xff0c;其轻量级设计使得攻击者能够更轻松地在不同环境中部署和调整。该框架采用模块化设计&#xff0c;支持C2工具的基本功能&#xff0c;例如在受感染的机器…

吴恩达深度学习课程五:自然语言处理 第二周:词嵌入(四)分层 softmax 和负采样

此分类用于记录吴恩达深度学习课程的学习笔记。 课程相关信息链接如下:原课程视频链接:[双语字幕]吴恩达深度学习deeplearning.ai github课程资料,含课件与笔记:吴恩达深度学习教学资料 课程配套练习(中英)与答案…

nessus离线安装

Nessus 离线安装 只能免费试用30天 参考文档:https://docs.tenable.com/nessus/Content/InstallNessusOffline.htm 获取激活码 打开网址 https://www.tenable.com/products/nessus/nessus-essentials 填写邮箱,提交。…

2026年天猫代运营服务商排名前五权威发布:专业深度测评揭晓

2026年天猫淘宝代运营服务商权威测评与排名发布 随着电商行业进入精细化、全域化运营新阶段,品牌方对专业、高效、可量化的天猫淘宝代运营服务需求持续攀升。为帮助品牌方、企业主及商家在众多服务商中做出客观决策,…

用Microsoft Visual Studio Installer Projects打包程序

参考https://blog.csdn.net/m0_51961114/article/details/134908822 添加文件方式 方式一&#xff1a;如下图方式&#xff0c;可能有的.dll文件没添加上 方式二&#xff1a;直接按照自己的Debug/Release下所需的文件目录和文件在Application Folder下创建并添加相关文件&…

【博客园】Markdown语法如何设置图片大小

使用html标签,格式如下: <div align="center"><img src="图片路径" style="zoom:70%" alt="图片名称"/></div> <div align="center">&l…