博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 1331 Minimax Triangulation DP, 三角剖分
阅读量:6305 次
发布时间:2019-06-22

本文共 2090 字,大约阅读时间需要 6 分钟。

  题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4077

  题目大意: 给出一个多边形, 输出三角剖分最大三角形最小化的最大三角形面积

  解题思路: 最大值最小化啊......猛然想到了二分, 但是这个是DP专题啊......d(i, j)表示多边形i ~ j的最优解, DP转移方程就是dp(i, j) = min(dp(i, j), max(dp(i, k), dp(k, j), get_Area(i, j, k)))

    下标是可以循环的, 我们先枚举长度, 再枚举左端点,然后再枚举中的点。有个trick, 如果是三个点组成的三角形有内点的话, 这三个点组成的三角形面积不算。 画图就知道了。

  代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;struct Node { double x, y;};Node a[55];double d[55][55]; // d[i][j] zconst int INF = 0x3fffffff;int m;const double eps = 1e-9;double area( int i, int j, int k ) { return 0.5 * abs(a[i].x*(a[j].y-a[k].y)+a[j].x*(a[k].y-a[i].y)+a[k].x*(a[i].y-a[j].y));}int judge( int p, int q, int r ) { // p, q, r组成的三角形无内点 double cur = area(p, q, r); for( int i = 0; i < m; i++ ) { if( i == p || i == q || i == r ) continue; double temp = area(p, q, i) + area(q, r, i) + area(p, r, i); if( fabs(temp-cur) < eps ) return 0; } return 1;}int main() { int T; scanf( "%d", &T ); while( T-- ) { memset(a, 0, sizeof(a)); scanf( "%d", &m ); for( int i = 0; i < m; i++ ) { scanf( "%lf%lf", &a[i].x, &a[i].y ); } for( int i = 0; i < m; i++ ) { for( int j = 0; j < m; j++ ) { if( i == 0 || i == 1 ) d[j][(j+i)%m] = 0.; else if( i == 2 ) d[j][(j+i)%m] = area(j, (j+1)%m, (j+2)%m); else d[j][(j+i)%m] = INF; } } for( int k = 3; k < m; k++ ) { for( int i = 0; i < m; i++ ) { int t = (i+k)%m; // 右端点// d[i][t] = INF; for( int j = (i+1)%m; j != t; j = (j+1)%m ) { if( judge(j, t, i) ) { d[i][t] = min(d[i][t], max({d[i][j], d[j][t], area(i, j, t)})); } } } }// for( int i = 0; i < m; i++ ) {// for( int j = 0; j < m; j++ ) {// printf( "%.1lf ", d[i][j] );// }// cout << endl;// } printf( "%.1lf\n", d[0][m-1] ); } return 0;}
View Code

  思考: 状态又想错了, 以后要是有点的话, 要考虑区间, 或者前i个点这种情况, 自己的心思不够缜密, 有好多漏解的情况, 还有Trick也想不到, 有时候真的感觉自己白学了一年......但是还是得接着学啊!

转载于:https://www.cnblogs.com/FriskyPuppy/p/7278720.html

你可能感兴趣的文章
http2-head compression
查看>>
C# 命名空间
查看>>
订餐系统之同步美团商家订单
查看>>
使用ArrayList时设置初始容量的重要性
查看>>
Java Web-----JSP与Servlet(一)
查看>>
Maven搭建SpringMVC+Mybatis项目详解
查看>>
关于量子理论:最初无意的简化,和一些人有意的强化和放大
查看>>
CentOS 6.9通过RPM安装EPEL源(http://dl.fedoraproject.org)
查看>>
“区块链”并没有什么特别之处
查看>>
没有功能需求设计文档?对不起,拒绝开发!
查看>>
4星|《先发影响力》:影响与反影响相关的有趣的心理学研究综述
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
python之 列表常用方法
查看>>
vue-cli脚手架的搭建
查看>>
在网页中加入百度搜索框实例代码
查看>>
在Flex中动态设置icon属性
查看>>
采集音频和摄像头视频并实时H264编码及AAC编码
查看>>
3星|《三联生活周刊》2017年39期:英国皇家助产士学会于2017年5月悄悄修改了政策,不再鼓励孕妇自然分娩了...
查看>>
linux查看命令是由哪个软件包提供的
查看>>
高级Linux工程师常用软件清单
查看>>