zoukankan      html  css  js  c++  java
  • 凸多边形剖分

    题目:

    给定一具有N个顶点(从1到N编号)的凸多边形,有多种方法可以对它进行三角形剖分。即用N-3条不相交的对角线把这个凸多边形划分成N-2个三角形。现在请你找到一种剖分方案,使得分出的N-2个三角形的周长之和最大。

     1 #include<cmath>
     2 #include<queue>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<iostream>
     6 #include<algorithm>
     7 using namespace std;
     8 int N;
     9 struct Point{
    10     double x,y;
    11 }E[805];
    12 void Init(){
    13     scanf("%d",&N);
    14     for(int i=1;i<=N;i++)
    15      scanf("%lf%lf",&E[i].x,&E[i].y);
    16     return ;
    17 }
    18 double L(int i,int j){
    19     return sqrt((E[i].x-E[j].x)*(E[i].x-E[j].x)+(E[i].y-E[j].y)*(E[i].y-E[j].y));
    20 }
    21 double Dist[805][805];
    22 double Dp(int i,int j){
    23     if(Dist[i][j]) return Dist[i][j];
    24     if(i+3==j) return max(L(i,i+2),L(i+1,j));
    25     double t1=0.0;
    26     t1=max(t1,Dp(i+1,j)+L(i+1,j));
    27     t1=max(t1,Dp(i,j-1)+L(i,j-1));
    28     return Dist[i][j]=t1;
    29 }
    30 void Solve(){
    31     double ans=L(1,N);
    32     for(int i=1;i<N;i++)
    33      ans+=L(i,i+1);
    34     printf("%.2f
    ",Dp(1,N)*2+ans);
    35     return ; 
    36 }
    37 int main(){
    38     Init();
    39     Solve();    
    40     return 0;
    41 }
    CODE

  • 相关阅读:
    HDU 5818 Joint Stacks
    HDU 5816 Hearthstone
    HDU 5812 Distance
    HDU 5807 Keep In Touch
    HDU 5798 Stabilization
    HDU 5543 Pick The Sticks
    Light OJ 1393 Crazy Calendar (尼姆博弈)
    NEFU 2016省赛演练一 I题 (模拟题)
    NEFU 2016省赛演练一 F题 (高精度加法)
    NEFU 2016省赛演练一 B题(递推)
  • 原文地址:https://www.cnblogs.com/Aloyd/p/9342367.html
Copyright © 2011-2022 走看看