Leetcode 1039. 多边形三角形剖分的最低得分 枚举型区间dp C++实现

问题:Leetcode 1039. 多边形三角形剖分的最低得分

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

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

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

算法1:记忆化搜索

时间复杂度:O(n³) 。其中 nvalues 的长度。动态规划的时间复杂度 = 状态个数 × 单个状态的计算时间。本题中状态个数等于 O(n²) ,单个状态的计算时间为 O(n) ,因此时间复杂度为 O(n³)
空间复杂度:O(n²) 。保存多少状态,就需要多少空间。

代码:

class Solution {
public:int minScoreTriangulation(vector<int>& values) {int n = values.size();vector<vector<int>> memo(n,vector<int>(n,-1));auto dfs = [&](auto &&dfs,int i,int j) -> int{if(i + 1 == j)  return 0;//只有两条边,不能构成三角形0int &res = memo[i][j];if(res != -1)   return res;//被计算过res = INT_MAX;for(int k = i + 1;k < j;k++)res = min(res,dfs(dfs,i,k) + dfs(dfs,k,j) + values[i] * values[j] * values[k]);return res;};return dfs(dfs,0,n - 1);}
};

算法2:1:1 翻译成递推

把 dfs 改成 dp 数组,把递归改成循环就好了。相当于原来是用递归计算每个状态 ( i  , j ) ,现在改用循环去计算每个状态 ( i , j ) 。

状态转移方程和递归完全一致

需要注意循环的顺序:

由于 i < kdp [ i ] 要能从 dp [ k ] 转移过来,必须先计算出 dp [ k ],所以 i 要倒序枚举;
由于 j > k dp [ i ] [ j ] 要能从 dp [ i ] [ k ] 转移过来,必须先计算出 dp [ i ] [ k ] ,所以 j 要正序枚举。

时间复杂度:O(n³) 。其中 n values 的长度。动态规划的时间复杂度 = 状态个数 × 单个状态的计算时间。本题中状态个数等于 O(n²) ,单个状态的计算时间为 O(n) ,因此时间复杂度为 O(n³) 

空间复杂度:O(n²) 。有 O(n²) 个状态。

代码:

class Solution {
public:int minScoreTriangulation(vector<int>& values) {int n = values.size();vector<vector<int>> dp(n,vector<int>(n));for(int i = n - 3;i >= 0;i--){for(int j = i + 2;j < n;j++){dp[i][j] = INT_MAX;for(int k = i + 1;k < j;k++)dp[i][j] = min(dp[i][j],dp[i][k] + dp[k][j] + values[i] * values[j] * values[k]);}}return dp[0][n - 1];}
};

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

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

相关文章

【QML】Button图标设置透明颜色,会变模糊有阴影

原图效果 1. 透明 1.1 效果 1.2 代码 Button{id: _mBtnwidth: parent.widthheight: parent.heightbackground: Rectangle{id: _mBgradius: 5antialiasing: truecolor: "white"}icon{source: _mRoot._mIconSourcecache: falsecolor: "transparent" //透明…

企微私域助手:重塑企业营销新生态的智能引擎

在数字化浪潮席卷全球的今天&#xff0c;企业营销已不再局限于传统渠道的广撒网模式&#xff0c;而是更加注重精细化运营与高效转化。企业微信&#xff08;简称“企微”&#xff09;作为连接企业内外、打造私域流量的重要平台&#xff0c;正逐步成为企业营销的新蓝海。而企微私…

[spring]MyBatis介绍 及 用MyBatis操作简单数据库

文章目录 一. 什么是MyBatis二. MyBatis操作数据库步骤创建工程创建数据库创建对应实体类配置数据库连接字符串写持久层代码单元测试 三. MyBatis基础操作打印日志参数传递增删改查 四. MyBatis XML配置文件配置链接字符串和MyBatis写持久层代码方法定义Interface方法实现xml测…

NLP--自然语言处理学习-day1

一.初步认识NLP 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;是计算机科学和人工智能&#xff08;AI&#xff09;的一个交叉领域&#xff0c;旨在使计算机能够理解、分析、生成和处理人类语言的能力。它结合了计算语言学、人工智能、机器学习和语言…

JavaWeb纯小白笔记02:Tomcat的使用:发布项目的三种方式、配置虚拟主机、配置用户名和密码

通过Tomcat进行发布项目的目的是为了提供项目的访问能力&#xff1a;Tomcat作为Web服务器&#xff0c;能够处理HTTP请求和响应&#xff0c;将项目的内容提供给用户进行访问和使用。 一.Tomcat发布项目的三种方式&#xff1a; 第一种&#xff1a;直接在Tomcat文件夹里的webapp…

开源RK3588 AI Module7,并与Jetson Nano生态兼容的低功耗AI模块

RK3588 AI Module7 搭载瑞芯微 RK3588&#xff0c;提供强大的 64 位八核处理器&#xff0c;最高时钟速度为 2.4 GHz&#xff0c;6 TOPS NPU&#xff0c;并支持高达 32 GB 的内存。它与 Nvidia 的 Jetson Nano 接口兼容&#xff0c;具有升级和改进的 PCIe 连接。由于该模块的多功…

Leetcode面试经典150题-39.组合总数进阶:40.组合总和II

本题是扩展题&#xff0c;真实考过&#xff0c;看这个题之前先看一下39题 Leetcode面试经典150题-39.组合总数-CSDN博客 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数…

9.23 My_string.cpp

my_string.h #ifndef MY_STRING_H #define MY_STRING_H#include <iostream> #include <cstring>using namespace std;class My_string { private:char *ptr; //指向字符数组的指针int size; //字符串的最大容量int len; //字符串当前…

【十八】MySQL 8.0 新特性

MySQL 8.0 新特性 目录 MySQL 8.0 新特性 概述 简述 1、数据字典 2、原子数据定义语句 3、升级过程 4、会话重用 5、安全和账户管理 6、资源管理 7、表加密管理 8、InnoDB增强功能 9、字符集支持 10、增强JSON功能 11、数据类型的支持 12、查询的优化 13、公用…

linux防火墙学习

Linux 防火墙配置&#xff08;iptables和firewalld&#xff09; Linux 防火墙配置&#xff08;iptables和firewalld&#xff09;_iptables配置文件位置-CSDN博客 Linux查看防火墙状态及开启关闭命令_linux 查看防火墙-CSDN博客

PatrOwl:一款开源可扩展的安全协调运营平台

关于PatrOwl PatrOwl是一款开源可扩展的安全协调运营平台&#xff0c;广大研究人员可以使用该工具完成组织内部的安全协调运营。 该工具是一种可扩展、免费且开源的解决方案&#xff0c;用于协调安全操作。其中的PatrowlManager是前端应用程序&#xff0c;用于管理资产、实时审…

实变函数研究的问题

实变函数论作为数学分析的一个深入与推广分支&#xff0c;主要研究实值函数的性质和行为。它的问题分类广泛&#xff0c;包括但不限于点集函数、序列、极限。 从更宏观的角度看&#xff0c;实变函数论还涉及实变函数的分类问题、结构问题&#xff0c;以及这些函数在各种数学分支…

el-form中三级动态添加数据

el-form中三级动态添加数据 data数据view按钮触发事件 data数据 submitForm: {id: undefined, //修改IDapp_id: undefined, //IP类型name: , //规则名称sort: undefined, //排序detail: [{keycode: 0,title_one: undefined, //一级标题desc_detail: [{keycode: 0,title_two: u…

阅读CVPR论文——mPLUG-Owl2:革命性的多模态大语言模型与模态协作

读后感悟&#xff1a; 1&#xff09;实验部分非常丰富&#xff0c;并且论文中的图制作的非常精美&#xff0c;论文开篇的图制作的别出心裁&#xff0c;将几种不同的方法表现出的性能差异不是以普通的表格形式展现&#xff0c;而是制作成了一副环状折线图&#xff0c;论文中其他…

快速理解TCP协议(三)——TCP协议的三次握手与四次挥手

在网络通信的浩瀚海洋中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;如同一座坚固的桥梁&#xff0c;连接着网络世界的每一个角落。TCP协议通过其独特的三次握手&#xff08;Three-Way Handshake&#xff09;和四次挥手&…

Docker vs. containerd 深度剖析容器运行时

随着容器技术的日益普及&#xff0c;Docker 和 containerd 这两个名词频繁出现在我们的视野中。它们都是容器化技术的重要组成部分&#xff0c;但各自扮演着不同的角色。本文将深入探讨 Docker 和 containerd 的区别与联系&#xff0c;帮助大家更好地理解容器技术的底层原理。 …

【protobuf】ProtoBuf的学习与使用⸺C++

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;之前我们学习了Linux与windows的protobuf安装&#xff0c;知道protobuf是做序列化操作的应用&#xff0c;今天我们来学习一下protobuf。 目录 ⼀、初识ProtoBuf 步骤1&#xff1a;创建.proto文件 步…

scss知识汇总

参考资料 https://www.bilibili.com/video/BV1KJ411Y7Zz?p11 //入门 https://www.bilibili.com/video/BV1bK411H7YU?fromsearch&seid1507236772512004325 //精简 https://www.bilibili.com/video/BV1KE411b7RQ?p25 //大全h…

软技能与AI技术的融合

一、引言 ----  随着人工智能&#xff08;AI&#xff09;和生成式人工智能&#xff08;AIGC&#xff09;如ChatGPT、Midjourney、Claude等大语言模型的迅速崛起&#xff0c;AI辅助编程工具已经变得越来越普遍。这不仅意味着程序员的工作方式正在发生深刻的变革&#xff0c;同…

Centos7 部署rocketmq

1.服务器先创建java环境 Centos7 安装JDK21、配置环境变量_centos7安装jdk21-CSDN博客 2.下载mq 下载的是5.1.4&#xff1a;wget https://dist.apache.org/repos/dist/release/rocketmq/5.1.4/rocketmq-all-5.1.4-bin-release.zip 下载后用unzip解压就行了 3.启动name serve…