hdu6219(最大空凸包)
题意:
给一些点,求出一个最大的空凸包,这个凸包里没有任何给定点且要求这个凸包面积最大
分析:
枚举凸包左下角的点,然后dp[i][j]表示凸包的最后两条边是j->i和i->O情况下凸包的面积最大值,这个是O(n^4)的
可以利用凸性求个前缀和来完成O(1)的转移
具体看这里:https://blog.csdn.net/nyroro/article/details/45268767
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
typedef int db;
struct Point
{
/*点类*/
db x,y;
Point(){}
Point(db _x,db _y):x(_x),y(_y){}
void input()
{
scanf("%d%d",&x,&y);
}
Point operator + (const Point &t)const
{
return Point(x+t.x,y+t.y);
}
Point operator - (const Point &t)const
{
return Point(x-t.x,y-t.y);
}
db operator * (const Point &t)const
{
return x*t.y-y*t.x;
}
db len()const
{
return x*x+y*y;
}
bool operator < (const Point &t) const
{
if((*this)*t!=) return (*this)*t>;
return len()<t.len();
}
}p[maxn+],a[maxn+];
int n,m;
int ans;
int dp[maxn+][maxn+],sum[maxn+][maxn+];
void work(int n)
{
memset(dp,,sizeof(dp));
memset(sum,,sizeof(sum));
for(int i=;i<=n;++i)
{
int j=i-;
while(j>=&&a[i]*a[j]==) --j;
bool flag=;
if(j==i-) flag=;
while(j>=)
{
int k=j-;
int res=a[j]*a[i];
while(k>=&&(a[j]-a[i])*(a[k]-a[j])>) --k;
if(k) res+=sum[j][k];
if(flag) dp[i][j]=res;
ans=max(ans,res);
j=k;
}
sum[i][]=dp[i][];
for(int j=;j<i;++j) sum[i][j]=max(dp[i][j],sum[i][j-]);
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;++i) p[i].input();
ans=;
for(int i=;i<=;++i)
{
m=;
for(int j=;j<=n;++j) if(p[j].y>p[i].y||(p[i].y==p[j].y&&p[j].x>=p[i].x)) a[++m]=p[j]-p[i];
//for(int i=1;i<=m;++i) printf("%d %d\n",a[i].x,a[i].y);
//printf("\n");
sort(a+,a+m+);
//for(int i=1;i<=m;++i) printf("%d %d\n",a[i].x,a[i].y);
work(m);
}
//printf("%d\n",ans);
printf("%.1f\n",1.0*ans/);
}
return ;
}
hdu6219(最大空凸包)的更多相关文章
- hdu6219 Empty Convex Polygons (最大空凸包板子
https://vjudge.net/contest/324256#problem/L 题意:给一堆点,求最大空凸包面积. 思路:枚举凸包左下角点O,dp找出以这个点为起始位置能构成的最大空凸包面积, ...
- Game of Taking Stones && POJ1259 /// 最大空凸包 几何+DP
题目大意: 给定n个点 求出这n个点中最大空凸包的面积 只放个模板 一份模板过两题(滑稽 这个讲解够详细了 https://blog.csdn.net/nyroro/article/details/4 ...
- 2017ACM/ICPC亚洲区沈阳站 C Hdu-6219 Empty Convex Polygons 计算几何 最大空凸包
题面 题意:给你一堆点,求一个最大面积的空凸包,里面没有点. 题解:红书板子,照抄完事,因为题目给的都是整点,所以最后答案一定是.5或者.0结尾,不用对答案多做处理 #include<bits/ ...
- POJ1259 The Picnic 最大空凸包问题 DP
POJ1259 给定平面上100个点 求一个最大的凸包,使得它不包含其中任意点,且凸包的顶点是题目所给的点. 枚举凸包左下角的点,顺时针枚举第二个点, 用opt[i][j]记录 i作为第二个点, 且第 ...
- 2017ACM-ICPC沈阳区域赛
I-Little Boxes[大数] hdu6225 http://acm.hdu.edu.cn/showproblem.php?pid=6225 题意: 就是给四个大数,输出和. 思路: java ...
- 2017ACM/ICPC亚洲区沈阳站(部分解题报告)
HDU 6225 Little Boxes 题意 计算四个整数的和 解题思路 使用Java大整数 import java.math.BigInteger; import java.util.Scann ...
- [poj1113][Wall] (水平序+graham算法 求凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...
- ZOJ 3871 Convex Hull(计算几何、凸包)
题意:给n个点,|x[i]|,|y[i]| <= 1e9.求在所有情况下的子集下(子集点数>=3),凸包的面积和. 这题主要有几个方面,一个是凸包的面积,可以直接用线段的有向面积和求得,这 ...
- UVALive 2453 Wall (凸包)
题意:给你一个多边形的城堡(多个点),使用最短周长的城墙将这个城堡围起来并保证城墙的每个点到城堡上的每个点的距离都不小于l 题解:因为两点间的直线一定比折线短,所以这样做 先使用所有点求得一个凸包,接 ...
随机推荐
- QT添加自定义信号后编译出现undefined reference
QT添加自定义信号后编译出现undefined reference 这是需要重新生成qmake: build --->run qmake
- 线段树:POJ3468-A Simple Problem with Integers(线段树注意事项)
A Simple Problem with Integers Time Limit: 10000MS Memory Limit: 65536K Description You have N integ ...
- 使用MeidaStore.Audio获得手机中的音频文件
MediaStore是安卓系统自带的多媒体系统数据库,他在每次开机时刷新一次,可以通过Cursor这个类对数据库进行访问与修改,修改之后需用广播强制刷新. 使用Cursor必须通过Context获得C ...
- 利用Windbg深入理解变量的存储模型
下面的是一个简单的测试程序,基本包括了所有的变量类型,包括静态的,常量的,全局的,本地的,还有new出来的 #include <iostream> using namespace std; ...
- luogu2158 [SDOI2008]仪仗队 欧拉函数
点 $ (i,j) $ 会看不见当有 $ k|i $ 且 $ k|j$ 时. 然后就成了求欧拉函数了. #include <iostream> #include <cstring&g ...
- Java常用api和操作必背
1.数组排序 Java的Arrays类(java.util中)包含用来操作数组(比如排序和搜索)的各种方法. Arrays.sort(各种类型数组) 2.数组转字符串 1)打印数组时可用Arrays. ...
- 缓存淘汰算法之FIFO
前段时间去网易面试,被这个问题卡住,先做总结如下: 常用缓存淘汰算法 FIFO类:First In First Out,先进先出.判断被存储的时间,离目前最远的数据优先被淘汰. LRU类:Least ...
- Wannafly挑战赛2
Cut 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 给你一个长度为n的序列,你每次可以将一个序 ...
- 九度oj 1004
题目1004:Median 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:17536 解决:4860 题目描述: Given an incre ...
- Linux命令之必须掌握的十条命令
Linux现如今已经成为了软件行业最流行的操作系统,掌握Linux就成为了每一个开发者必备的专业技能. 为了方便大家学习,大学君在此为大家整理了在使用Linux时必须掌握的十条命令,希望大家能熟练掌握 ...