当前位置: 首页 > article >正文

【lambda表达式】【DP】个人练习-Leetcode-1039. Minimum Score Triangulation of Polygon

题目链接:https://leetcode.cn/problems/minimum-score-triangulation-of-polygon/description/

题目大意:给出一个凸多边形,每个顶点有一个值values[i],顶点按照顺时针给出。将其三角化,每个三角形的值是三个顶点值的乘积,一个三角化方法的值是所有三角形的值的和。求三角化方法最低取得的值。

思路:凸多边形三角化上一次碰到还是卡塔兰数(凸多边形三角化的方案数就是卡塔兰数)。但具体记不太清了。先想着的是一共有3n-6个数,其中n个数必然是凸多边形的顶点。剩下的2n-6个数是重复一遍的,也就是n-3个数。但怎么算最终值有点没想出来。

看了题解后,知道了可以dp来做,就是分割任务。对一条凸多边形的边i-j来说,最终的最优值就是i-j-k(三角形)+ i-k(凸多边形)+ k-j(凸多边形)。两个凸多边形可以递归。

但我把递归的dfs函数写在外面时,就超时了,只有和题解一样用lambda表达式写dfs函数才能通过。应该是lambda表达式函数调用开销小,局部性更好吧。

关于lambda表达式的递归,这篇文章很详细:https://blog.csdn.net/J__M__C/article/details/125437699

完整代码

class Solution {
public:
    int minScoreTriangulation(vector<int>& v) {
        int n = v.size();
        vector<vector<int>> dp(n, vector<int>(n, -1)); 
        auto dfs = [&](auto&& self, int i, int j) -> int {
            if (i + 1 == j)
                return 0; 
            int &res = dp[i][j];
            if (res != -1) 
                return res;
            res = INT_MAX;
            for (int k = i + 1; k < j; k++) {
                res = min(res, self(self, i, k) + self(self, k, j) + v[i] * v[j] * v[k]);
            }
            return res;
        };
        return dfs(dfs, 0, n - 1);
    }
};


http://www.kler.cn/a/390149.html

相关文章:

  • 基于迭代重加权最小二乘法的算法及例程
  • Linux 进程线程间通信总结
  • 如何在Puppeteer中实现表单自动填写与提交:问卷调查
  • Kafka参数了解
  • 开源vs闭源:你更看好哪一方?
  • P8680 [蓝桥杯 2019 省 B] 特别数的和
  • QML —— 遮罩功能,模拟软件头像功能(附源码)
  • python printf中文乱码
  • JedisException:Could not get a resource from the pool
  • SpringCloud 微服务消息队列灰度方案 (RocketMQ 4.x)
  • SQL 窗口函数
  • 什么是C/C++,有什么特点
  • 物联网学习路线来啦!
  • 道可云人工智能元宇宙每日资讯|2024国际虚拟现实创新大会将在青岛举办
  • cache写策略 操作系统
  • nginx 部署2个相同的vue
  • 241111.学习日志——【CSDIY】Cpp零基础速成
  • 2024年11月10日系统架构设计师考试题目回顾
  • 【算法速刷(9/100)】LeetCode —— 42.接雨水
  • 2024年9月青少年软件编程(C语言/C++)等级考试试卷(四级)
  • flask logger 使用 TimedRotatingFileHandler 报错 PermissionError 另一个程序正在使用此文件
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法
  • 哪家云服务器好跑AI?瞄准AutoDL(附NVIDIA GPU 算力排名表)
  • Linux基础之病毒编写
  • Docker 操作指令
  • 如何设置el-date-picker的默认截止时间为“23:59:59”