zoukankan      html  css  js  c++  java
  • 凸多边形三角划分

    给定一个具有N(N<50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小?

    输入文件:第一行 顶点数N

              第二行 N个顶点(从1到N)的权值

    输出格式:最小的和的值

              各三角形组成的方式

    输入示例:5

    122  123  245  231

    输出示例:The  minimum  is :12214884

    /*
        区间DP 
        f[i][j]表示区间i-j的最小成绩之和,然后枚举断点k,使i,j,k形成一个三角形。 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring> 
    #define N 60
    #define lon long long
    using namespace std;
    int a[N],n;
    lon f[N][N];
    int main(){
        memset(f,127/3,sizeof(f));
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=n;i++) f[i][i+1]=0;
        for(int i=n-2;i>=1;i--)
            for(int j=i+2;j<=n;j++)
                for(int k=i+1;k<j;k++)
                    f[i][j]=min(f[i][j],f[i][k]+f[k][j]+a[i]*a[j]*a[k]);
        cout<<f[1][n];
        return 0;
    }
  • 相关阅读:
    problems_springmvc
    skills_eclipse
    problems_azkaban
    CentOS7与CentOS6的不同
    2021暑期cf加训2
    2021牛客暑期多校训练营4
    2021牛客暑期多校训练营3
    2021暑期cf加训1
    2021牛客暑期多校训练营2
    10.git rm 移除文件
  • 原文地址:https://www.cnblogs.com/harden/p/6730880.html
Copyright © 2011-2022 走看看