UVA 最大面积最小三角形剖分
题目大意:
以顺时针或逆时针给出一个简单多边形的n个点的坐标,用n-2条互不相交的,且与边不相交的对角线,分成n-2个三角形,要求其中最大三角形的面积最小
开始还汪星人咬乌龟,无从下口,但在度娘翻译的帮助下,看到了顺时针,眼前一亮,环形的分割问题
设f[i][j]表示从i号点到j号点这个子多边形的最大三角形面积最小值,则列出状态转移方程:
f[i][j]=min(f[i][j],max(S(i,j,k),max(f[i][k],f[k+1][j])));
不会算面积?海伦公式一波带走
设三角形三边为abc,设p=(a+b+c)/2
则S=(√p⋅(p−a)⋅(p−b)⋅(p−c))
美滋滋地码好代码交上去,WA了,我艹
猛然发现,(用n-2条互不相交的,且与边不相交的对角线)
23333333333333……
于是换个角度想想,如果一条对角线与边相交,那这条对角线形成的某个三角形,内部一定有点,于是我们可以枚举出这个点,如果某个点i,与三角形三点abc,形成:
S(a,b,i)+S(a,c,i)+S(b,c,i)=S(a,b,c)
那么这个点一定在三角形内,排除掉就行了
代码如下:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
#include<algorithm>
#define INF 1<<30
#define eps 0.001
using namespace std;
double f[51][51];
double dis[51][51];
int n,x[51],y[51];
int getint()
{
int num=0,flag=1;char c;
while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;
while(c>='0'&&c<='9')num=num*10+c-48,c=getchar();
return num*flag;
}
double S(double a,double b,double c)
{
double p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
bool check(int a,int b,int c)
{
for(int i=1;i<=n;i++)
if(i!=a&&i!=b&&i!=c)
if(fabs(S(dis[i][a],dis[i][b],dis[a][b])+S(dis[i][a],dis[i][c],dis[a][c])+S(dis[i][b],dis[i][c],dis[b][c])-S(dis[a][b],dis[a][c],dis[b][c]))<eps)
return 1;
return 0;
}
int main()
{
int i,j,o,t=getint();
while(t--)
{
memset(f,0x7f,sizeof f);
n=getint();
for(i=1;i<n;i++)f[i][i+1]=0;
for(i=1;i<=n;i++)x[i]=getint(),y[i]=getint();
for(i=1;i<=n;i++)for(j=1;j<=n;j++)dis[i][j]=sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
for(o=2;o<=n;o++)
for(i=1;i<=n-o;i++)
for(j=i+1;j<i+o;j++)
if(!check(i,j,i+o))
f[i][i+o]=min(max(S(dis[i][j],dis[j][i+o],dis[i+o][i]),max(f[i][j],f[j][i+o])),f[i][i+o]);
printf("%.1lf\n",f[1][n]);
}
}
UVA 最大面积最小三角形剖分的更多相关文章
- UVa 1331 最大面积最小的三角剖分
https://vjudge.net/problem/UVA-1331 题意:输入一个多边形,找一个最大三角形面积最小的三角剖分,输出最大三角形的面积. 思路: 最优三角剖分. dp[i][j]表示从 ...
- 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵
题目描述: 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积) 输入: 每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K 接下 ...
- 求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小。
求曲线y=lnx在区间(2,6)内的一条切线,使得该切线与直线x=2,x=6及曲线y=lnx所围成的图形的面积最小. 1.先画图. 2.设切点为(a,lna) (2<a<6) 3.切线方程 ...
- UVA - 10480 Sabotage 最小割,输出割法
UVA - 10480 Sabotage 题意:现在有n个城市,m条路,现在要把整个图分成2部分,编号1,2的城市分成在一部分中,拆开每条路都需要花费,现在问达成目标的花费最少要隔开那几条路. 题解: ...
- UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
题意: 给出一个有向带权图,找到若干个圈,使得每个点恰好属于一个圈.而且这些圈所有边的权值之和最小. 分析: 每个点恰好属于一个有向圈 就等价于 每个点都有唯一后继. 所以把每个点i拆成两个点,Xi ...
- UVa 1599 (字典序最小的最短路) Ideal Path
题意: 给出一个图(图中可能含平行边,可能含环),每条边有一个颜色标号.在从节点1到节点n的最短路的前提下,找到一条字典序最小的路径. 分析: 首先从节点n到节点1倒着BFS一次,算出每个节点到节点n ...
- UVA 6199 不定根最小树形图
首先是最小树形图的介绍. 看这个博客.最小树形图 上面介绍的很详细了,我就讲一下这道题的题意. 首先给出一些二维点坐标,这些坐标之间构成一些有向图,根据题意,假设两个点a(x1 ,y1) ,b(x2 ...
- UVA 455(最小周期)
最小周期可以用%枚举 #include <iostream> #include <string> #include <cstring> #include <c ...
- 紫书 例题 9-11 UVa 1331 (最优三角形剖分)
设置f(i, j)为点i, i + 1 --j所组成的多边形. 那么可以枚举中间点k, 得f(i, j) = min{s(i, j, k), f(i, k), f(k, j) | i < k & ...
随机推荐
- oracle解除被锁定的表的状态
select b.owner,b.object_name,a.session_id,a.locked_mode,c.serial#,c.sid||','||c.serial# from v$loc ...
- 安卓APP动态调试(IDA实用攻略)
转自:http://drops.wooyun.org/mobile/5942 0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖 ...
- unsupported jsonb version number 123
PostgreSQL jsonb 入库时遇到 unsupported jsonb version number 123 变通方法 insert into htclanedata (laneda ...
- 用WPF实现大数据展示,超炫的效果
开头语 经过一段时间研究,终于实现CS和BS相同效果的大数据展示平台了.首先来看看实现的效果,超炫的效果,客户特别喜欢,个人也非常满意,分享给各位,同大家一起交流学习. 从上图可以看出,分为左中右三栏 ...
- Struts||IQ
Here's question about struts2....... 1.struts2原理 初始的请求通过一条标准的过滤器链,到达 servlet 容器 ( 比如 tomcat 容器,WebSp ...
- java编程思想札记一
1. 访问权限中尤其注意protected,它包含了包访问权限,只要是同一个包里的,就能访问到protected成员. 2. 后期绑定:被调用代码直到执行时才能确定,编译阶段只保证调用方法存在和类 ...
- Revealjs网页版PPT让你复制粘贴另类装逼,简洁优雅又低调,不懂编程也看过来
Revealjs网页版PPT让你复制粘贴另类装逼,简洁优雅又低调,不懂编程也看过来 要了解一个新知识我们可以从三个方面入手:是什么,有什么用,怎么用.下面我们就从这三个方面进行讲解Reveal.js噢 ...
- 从零开始学asyncio(上)
这篇文章主要是介绍生成器和IO多路复用机制, 算是学习asyncio需要的预备知识. 这个系列还有另外两篇文章: 从零开始学asyncio(中) 从零开始学asyncio(下) 一. 简单爬虫实例 首 ...
- SpringCloud入门系列0-Nacos的安装与配置
背景 工作有一些年头了,自从19年初彻底转了java(这又是另一篇心酸的故事),突然感觉自己荒废了好几年(不是说.net不好,而是回顾自己这几年做的很多东西都浮于表面,有时候弄成很忙的样子,回头看看自 ...
- javaScript类型和对象
javaScript基本数据类型 Undefined: Null: Boolean: String: Number: Symbol: Object. 注意 JavaScript 的代码 undefin ...