力扣每日一题 ---- 1039. 多边形三角剖分的最低得分

这题的难点在哪部分呢,其实是怎么思考。这道题如果之前没做过类似的话,还是很难看出一些性质的,这题原本的话是没有图片把用例显示的这么详细的。这题中有个很隐晦的点没有说出来

剖出来的三角形是否有交叉,这题中如果加一个三角形之间没有任何交集除了边,会更好理解一点。然后我们就是这么去知道该怎么剖三角形,知道该怎么剖三角形之后。我们再来考虑这是道什么题目,爆搜三角形的乘积的话,我们是n^3,爆搜四边形的乘积的话是这个就不好说了,因为四边形也是由多个是三角形组成的,五边形六边形等等同理

本题中,我们要求的是多边形中能切出的三角形的乘积,我们现在爆搜只是知道多边形中每个三边型的乘积最小值(因为是三角形所以最小值是确定的),并不知道多边形的乘积最小是多少,那么我们三角形其实也算是多边形,但是在本题中他是特殊的三角多边形,而我现在的情况是要求出四边形,五边形,六边型......的乘积最小值,那么知道了这个情况之后,我们再去思考下一步,就是确认是否有递推性质,四边形的最小值是由多个组合的三边形的和中的最小值决定的,那五边形呢?那五边形是不是可以划分为一个四边形和一个三边形,六边形是不是可以划分为一个一个五边形和四边形,我们发现了一个性质,我们可以从三边形的最小值递推到n边形,那么我们就知道了这题目具有递推性质,具有递推性质我们可以用记忆化搜索和动态规划来解决。

前面这些我们是知道整体思路是什么,是本题具有递推性质。那么现在我们就可以根据递推性质来找解决办法了。

那么知道了解决办法后,还有一个难点就是,怎么算这些多边形的乘积。

那么我们现在只知道每一个三角形的乘积,这个三角形的乘积我们是已知的,然后多枚举几个发现一个性质,每个三角形都能把多边形分成三部分,发现三角形可以将整体分成三部分,再继续发现一个性质,不管你以那个三角形分成左右两边,有几个三角形的一条边一定是固定的,也就是外边,那么只要我们枚举外边的任意一个边的所有三角形就可以知道所有组成多边形的三角形最小值了。

知道了怎么算多边形,那么我们现在就是可以确定用什么方法了。动态规划和记忆化搜索都行

先来个记忆化搜索

i < k < j

class Solution {
public:int f[110][110];int minScoreTriangulation(vector<int>& values) {memset(f,0x3f3f3f3f,sizeof(f));function<int(int, int)> dfs = [&](int i,int j)->int{if(abs(i - j) <= 1){return 0;}if(f[i][j] != 0x3f3f3f3f) return f[i][j];for(int k = i + 1;k < j;k++){f[i][j] = min(f[i][j],dfs(i,k) + dfs(k,j) + values[i]*values[j]*values[k]);}return f[i][j];};dfs(0,values.size() - 1);return f[0][values.size() - 1];}
};

动态规划:

动态规划部分的话,我们其实在计算的时候,我们的四边形依赖于三边形,五边形依赖于四边形和三边形,六边形同理等等,那么我们就可以根据长度为阶段,然后后面的部分就是固定左和右端点,然后枚举k就行,i < k < j

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 70;int n;
int a[N];
__int128 f[N][N];
ostream &operator << (ostream &out,__int128 x) {if (!x) {out << 0;return out;}int stk[110],top = 0;while (x) stk[++top] = x % 10,x /= 10;for (int i = top;i >= 1;i--) out << stk[i];return out;
}
int main()
{cin>>n;for(int i = 1;i <= n;i++){cin>>a[i];}//memset(f,0x3f,sizeof f);for(int len = 1;len <= n;len++){for(int l = 1,r;r = l + len - 1,r <= n;l++){if(len < 3) f[l][r] = 0;else{f[l][r] = 1e29;for(int k = l + 1;k < r;k++){f[l][r] = min(f[l][r],f[l][k] + f[k][r] + (__int128)a[l] * a[k] * a[r]);}}}}cout<<f[1][n]<<endl;return 0;
}

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

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

相关文章

Autodesk AutoCAD 2024:开启无限创意,塑造未来设计

随着科技的飞速发展&#xff0c;设计行业正在经历前所未有的变革。作为设计领域的核心软件&#xff0c;Autodesk AutoCAD 2024以其强大的功能和卓越的性能&#xff0c;引领着设计行业的创新潮流。 AutoCAD 2024不仅继承了前代版本的优点&#xff0c;更在功能和性能上进行了全面…

上门预约回收小程序开发,开启互联网回收模式

随着环保理念的提升&#xff0c;废弃物品不再采用丢弃的方式&#xff0c;更多的是进行回收&#xff0c;因此&#xff0c;我国回收行业迎来了发展蓝海。而废品回收行业在众多行业中也是一个创业蓝海选择&#xff0c;回收行业的市场体量庞大&#xff0c;有较大的发展前景。 如今…

插槽(64-67)

文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容&#xff08;默认值&#xff09;3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…

微信小程序(十四)分包和分包预加载

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.分包的配置 2.分包预加载的写法 先说说为什么需要分包&#xff1a; 小程序追求小而快&#xff0c;主包的大小控制是小程序上线的硬性要求&#xff0c;分包有利于小程序优化加载速度 分包的注意事项&#xff1a…

构建外卖跑腿系统:技术实现与架构设计

在当今数字化时代&#xff0c;外卖跑腿系统已成为人们生活中不可或缺的一部分。本文将探讨如何利用先进的技术和架构设计&#xff0c;开发一个高效、可靠的外卖跑腿系统。 1. 技术选型 在开发外卖跑腿系统之前&#xff0c;我们需要仔细选择适合的技术栈&#xff0c;以确保系…

16.计划任务服务程序

计划任务分为一次性计划任务与长期性计划任务 一次性任务 一次性计划任务只执行一次&#xff0c;一般用于临时的工作需求。 at 可以用at命令实现这种功能&#xff0c;只需要写成"at 时间"的形式就行 如果想要查看已设置好但还未执行的一次性 计划任务&#xff0…

五、Kotlin 函数进阶

1. 高阶函数 1.1 什么是高阶函数 以下 2 点至少满足其一的函数称为高阶函数&#xff1a; 形参列表中包含函数类型的参数 //参数 paramN 可以是&#xff1a;函数引用、函数类型变量、或 Lambda 表达式。 fun funName(param1: Type1, param2: Type2, ... , paramN: (p1: T1, p2…

Flask 之旅 (二):表单

背景 上一篇帖子我们使用 Flask 创建了最基本的 web 服务。使用 bootstrap 对页面进行装点&#xff0c;使用 JQuery Ajax 实现了在页面上实时显示 log 的功能。趁着周末&#xff0c;我继续开始学习更多的东西以满足这个 web 服务的需求。 模板继承 之前我们有了首页&#xf…

MYSQL库和表的操作(修改字符集和校验规则,备份和恢复数据库及库和表的增删改查)

文章目录 一、MSYQL库的操作1.连接MYSQL2.查看当前数据库3.创建数据库4.字符集和校验规则5.修改数据库6.删除数据库7.备份和恢复8.查看连接 二、表的操作1.创建表2.查看表结构3.修改表4.删除表 一、MSYQL库的操作 1.连接MYSQL 我们使用下面的语句来连接MSYQL&#xff1a; my…

【阻塞队列】阻塞队列的模拟实现及在生产者和消费者模型上的应用

文章目录 &#x1f4c4;前言一. 阻塞队列初了解&#x1f346;1. 什么是阻塞队列&#xff1f;&#x1f345;2. 为什么使用阻塞队列&#xff1f;&#x1f966;3. Java标准库中阻塞队列的实现 二. 阻塞队列的模拟实现&#x1f35a;1. 实现普通队列&#x1f365;2. 实现队列的阻塞功…

JVM篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、JAVA 强引用二、JAVA软引用三、JAVA弱引用四、JAVA虚引用五、分代收集算法前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧…

怎么获取二维码的链接?二维码转链接只需3步

怎么从二维码中提取内容呢&#xff1f;现在很多内容都会用二维码方式来存储&#xff0c;但是有些场景下二维码是无法使用的时候&#xff0c;想要查看二维码中的内容&#xff0c;就需要分解二维码成链接后使用。那么二维码分解成链接具体该怎么做呢&#xff1f;今天就将在线二维…