●POJ 1259 The Picnic
题链:
http://poj.org/problem?id=1259
题解:
计算几何,凸包,DP
题意:给出N($N\leq100$)个点,求出最大的凸包使得凸包里面不存在点(边上可以有)。输出最大凸包的面积。
把所有点按x从小到大排序(若x相同则按y从小到大排序)。
依次枚举每个点p,把它作为凸包的左下角来计算此时可以形成的最大凸包。
做法如下:
将p号点作为原点,取出p+1~N的点(共m=N-p个点),对这m个点按极角逆时针排序。
然后定义DP状态:
f[j][i]:表示以i,j作为当前凸壳的最后两个点时的最大面积。(p<j<i)
转移:(S(j,i,p)表示j,i,p三个点形成的三角形)
f[j][i]=max(f[k][j])+S(j,i,p) (p<k<j且 $\vec{kj}\times\vec{ji}\geq0$,即要形成凸壳)
差不多就这样,然后注意细节就好了。(反正我是弄了好久才过样例的,233)
复杂度 $O(N^4)$
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 105
#define INF 0x3f3f3f3f
using namespace std;
struct Point{
int x,y;
Point(int _x=0,int _y=0):x(_x),y(_y){}
void Read(){scanf("%d%d",&x,&y);}
}D[MAXN],Q[MAXN];
typedef Point Vector;
bool operator == (Point A,Point B){return A.x==B.x&&A.y==B.y;}
Vector operator - (Point A,Point B){return Vector(A.x-B.x,A.y-B.y);}
int operator ^ (Vector A,Vector B){return A.x*B.y-A.y*B.x;}
int operator * (Vector A,Vector B){return A.x*B.x+A.y*B.y;}
int GL2(Vector A){//Get_Length^2
return A*A;
}
bool XYcmp(Point A,Point B){return A.x-B.x<0||(A.x-B.x==0&&A.y-B.y<0);}
bool PAcmp(Point A,Point B){return (A^B)>0||((A^B)==0&&GL2(A)<GL2(B));}
bool inTArea(Point P,Point A,Point B){//in_Triangle_Area
if(((B-A)^(P-A))<=0) return 0;
if((P^B)<=0||(P^A)>0) return 0;
return 1;
}
int F[MAXN][MAXN];
int DP(int m){
int ret=0;
memset(F,0,sizeof(F));
for(int i=1;i<=m;i++)
for(int j=1;j<i;j++)
for(int k=j+1;k<i;k++){
if(Q[k]==Q[i]||Q[k]==Q[j]) continue;
if(!inTArea(Q[k],Q[j],Q[i])) continue;
F[j][i]=-INF;break;
}
for(int i=1;i<=m;i++)
for(int j=1;j<i;j++) if(!F[j][i]){
F[j][i]=Q[j]^Q[i]; int tmp=0;
for(int k=j-1;k;k--){
if(((Q[j]-Q[k])^(Q[i]-Q[j]))>=0) tmp=max(tmp,F[k][j]);
if(!(Q[k]^Q[j])) break;
}
F[j][i]+=tmp;
ret=max(ret,F[j][i]);
}
return ret;
}
int work(int n){
int m,ret=0;
sort(D+1,D+n+1,XYcmp);
for(int i=1;m=0,i<=n;i++){
for(int j=i+1;j<=n;j++) Q[++m]=D[j];
for(int j=1;j<=m;j++) Q[j]=Q[j]-D[i];
sort(Q+1,Q+m+1,PAcmp);
ret=max(ret,DP(m));
}
return ret;
}
int main(){
int Case,n; double ans;
for(scanf("%d",&Case);Case;Case--){
scanf("%d",&n);
for(int i=1;i<=n;i++) D[i].Read();
ans=1.0*work(n)/2;
printf("%.1lf\n",ans);
}
return 0;
}
●POJ 1259 The Picnic的更多相关文章
- poj 1259 Agri-Net(最小生成树)
题目:http://poj.org/problem?id=1258 题意:模板题 和2485差不多 就是求相连后的最小值. #include <iostream> #include< ...
- 【POJ 1639】 Picnic Planning (最小k度限制生成树)
[题意] 有n个巨人要去Park聚会.巨人A和先到巨人B那里去,然后和巨人B一起去Park.B君是个土豪,他家的停车场很大,可以停很多车,但是Park的停车场是比较小.只能停k辆车.现在问你在这个限制 ...
- POJ 3256 Cow Picnic
Cow Picnic Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4928 Accepted: 2019 Descri ...
- Picnic Planning POJ - 1639(最小k度生成树)
The Contortion Brothers are a famous set of circus clowns, known worldwide for their incredible abil ...
- POJ 1639 Picnic Planning 最小k度生成树
Picnic Planning Time Limit: 5000MS Memory Limit: 10000K Total Submissions:11615 Accepted: 4172 D ...
- POJ 1639 Picnic Planning(最小度限制生成树)
Description The Contortion Brothers are a famous set of circus clowns, known worldwide for their inc ...
- POJ 1639 Picnic Planning:最小度限制生成树
题目链接:http://poj.org/problem?id=1639 题意: 给你一个无向图,n个节点,m条边,每条边有边权. 让你求一棵最小生成树,同时保证1号节点的度数<=k. 题解: 最 ...
- [POJ 1639] Picnic Planning
[题目链接] http://poj.org/problem?id=1639 [算法] 首先,我们可以用深度优先遍历求出1号节点去除后有几个联通块 设共有T个联通块,若T > K则无解,否则 : ...
- poj 1639 Picnic Planning 度限制mst
https://vjudge.net/problem/POJ-1639 题意: 有一群人,他们要去某一个地方,每个车可以装无数个人,给出了n条路,包含的信息有路连接的地方,以及路的长度,路是双向的,但 ...
随机推荐
- Alpha冲刺Day4
Alpha冲刺Day4 一:站立式会议 今日安排: 我们把项目大体分为四个模块:数据管理员.企业人员.第三方机构.政府人员.完成了数据库管理员模块.因企业人员与第三方人员模块存在大量的一致性,故我们团 ...
- 学号:201621123032 《Java程序设计》第11周学习总结
1:本周学习总结 1.1.:以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2:书面作业 2.1.: 源代码阅读:多线程程序BounceThread 1.1: BallRunnable类有什 ...
- 01-JavaScript之变量
这个系列的文章主要讲解JavaScript的常见用法,适合于初中级的前端开发人员,也可以对比TypeScript的系列文章来看. 先介绍JavaScript的变量与常见变量的函数,代码如下: //变量 ...
- PHP冒泡排序、选择排序、插入排序
$arr = [1, 8, 7, 5, 4, 2, 11, 9, 20]; 冒泡排序: for ($i = 0; $i < count($arr); $i ++) { for ($j = 0; ...
- Mego开发文档 - 保存关系数据
保存关系数据 由于没有对象的更改跟踪,因此关系的操作需要开发者明确指定,在成功执行后Mego会影响到相应的关系属性中. 添加关系 在以下示例中如果成功执行则source的Customer属性会变为ta ...
- hadoop2.6.0实践:引入开发依赖的jar包
hadoop-2.5.0\share\hadoop\common 所有jar,hadoop-2.5.0\share\hadoop\common\lib 所有jar,hadoop-2.5.0\sha ...
- 关于CheckStyle在eclipse出现的问题
今天在公司换了一个CheckStyle xml文件.那么我尝试直接import进去新的文件. 在我Check code的时候就爆了下面的错误 o: Failed during checkstyle c ...
- 基于OpenCV单目相机的快速标定--源码、工程、实现过程
相机的标定是所有人走进视觉世界需要做的第一件事,辣么多的视觉标定原理解释你可以随便在网上找到,这里只讲到底如何去实现,也算是给刚入门的朋友做个简单的分享. 1.单目相机标定的工程源码 首先请到同性交友 ...
- POJ-2184 Cow Exhibition---01背包变形(负数偏移)
题目链接: https://vjudge.net/problem/POJ-2184 题目大意: 给出num(num<=100)头奶牛的S和F值(-1000<=S,F<=1000),要 ...
- 计算机网络-应用层之HTTP协议
1.概念 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写:HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等). ...