• leetcode 1039. 多边形三角剖分的最低得分(区间dp)


    题意:

    给定 N,想象一个凸 N 边多边形,其顶点按顺时针顺序依次标记为 A[0], A[i], ..., A[N-1]

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

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

    示例 :

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

    思路:

    思路:区间dp。

    dp[i][j]表示,将[i,j]的点组成的多边形的最小和。

    k是(i,j)中的点。

    这个多边形可以分成三个部分,多边形[i,k],多边形[k,j],三角形(i,j,k);

    假设多边形[i,k],多边形[k,j]已知,遍历这个k,可以到这最小值。

    然后可以将问题转化为子问题,求解多边形[i,k],多边形[k,j]的最小值。

     1 const int N=50;
     2 class Solution {
     3 public:
     4     int dp[N+10][N+10];
     5     int minScoreTriangulation(vector<int>& A) {
     6         memset(dp,0x3f,sizeof(dp));
     7         int l=A.size();
     8         for(int i=0;i<l;i++)dp[i][i+1]=0;
     9         for(int len=3;len<=l;len++){
    10             for(int i=0;i+len-1<l;i++){
    11                 int j=i+len-1;
    12                 for(int k=i+1;k<j;k++){
    13                     dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+A[i]*A[k]*A[j]);
    14                 }
    15             }
    16         }
    17         return dp[0][l-1];
    18     }
    19 };
    View Code
  • 相关阅读:
    vSan中见证组件witness详解
    zabbix监控企业esxi虚拟机
    新特性之MAPI over HTTP 配置 MAPI over HTTP
    Exchange Server 产品路线图 及 补丁下载
    人生的第一桶金
    这不是我想要的生活,努力才是王道!
    孤独的灵魂该去何处安家
    如何查看myeclipse是否激活
    Visual Studio 2013如何破解(密钥激活)
    unity破解步骤
  • 原文地址:https://www.cnblogs.com/ljy08163268/p/11733844.html
Copyright © 2020-2023  润新知