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;
    }
  • 相关阅读:
    MAVEN 安装与配置
    MAVEN 常用仓库地址
    一些常用的工具
    springFramework 源码学习之源码下载与编译
    测试工程师学习笔记
    什么是多态
    聚簇索引与非聚簇索引
    正则表达式菜鸟教程
    我的第一篇博客
    转Hibernate继承
  • 原文地址:https://www.cnblogs.com/harden/p/6730880.html
Copyright © 2011-2022 走看看