POJ3178 计算几何+DP
//一些点一些圆,过圆不能连线,相邻点不能连线,问最多连几条线
//计算几何模板+区间dp
//关键是判断圆和线段是否相交
#include <cstdio>
#include <cmath>
#include <algorithm>
#define N 500
#define ll long long
#define sqr(x) ((x)*(x))
using namespace std;
bool ok[N][N];
ll n,m,r,f[N][N];
struct poi
{
ll x,y;
poi(ll X,ll Y)
{
x=X;y=Y;
}
poi()
{
}
} p[N],q[N];
ll cro(poi a,poi b)
{
return (a.x*b.y-a.y*b.x);
}
ll dot(poi a,poi b)
{
return a.x*b.x+a.y*b.y;
}
poi tr(poi a,poi b)
{
return poi(a.x-b.x,a.y-b.y);
}
double dis(poi a,poi b)
{
return sqrt((double)(sqr(a.x-b.x)+sqr(a.y-b.y)));
}
bool cmp(poi a,poi b)
{
return (a.x<b.x)||(a.x==b.x && a.y<b.y);
}
bool cmp2(poi a,poi b)
{
return cro(tr(a,p[]),tr(b,p[]))>;
}
bool check(poi a,poi b)
{
double C=dis(a,b);
for(int i=;i<=m;i++)
{
double A=dis(q[i],a);
double B=dis(q[i],b);
double COSA=(B*B+C*C-A*A)/(*B*C);
double COSB=(A*A+C*C-B*B)/(*A*C);
if(COSA<1e-||COSB<1e-){
if(A<1.0*r+1e-||B<1.0*r+1e-)return ;
else continue;
}
double SINA=sqrt(-COSA*COSA);
double H=B*SINA;
if(H<1.0*r+1e-)return ;
}
return ;
}
int main()
{
scanf("%d%d%d",&n,&m,&r);
for(int i=;i<=n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
sort(p+,p++n,cmp);
sort(p+,p++n,cmp2);
for(int i=;i<=m;i++)
scanf("%d%d",&q[i].x,&q[i].y);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(i!= || j!=n)
ok[i][j]=check(p[i],p[j]);
for(int len=;len<=n;len++)
for(int start=;start<=n;start++){
ll end=start+len;
for(int k=start+;k<min(end,n);k++)
f[start][end]=max(f[start][end],f[start][k]+f[k][end]);
f[start][end]+=ok[start][end];
}
printf("%d\n",f[][n]);
}
POJ3178 计算几何+DP的更多相关文章
- sdut 2153:Clockwise(第一届山东省省赛原题,计算几何+DP)
Clockwise Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Saya have a long necklace with ...
- poj3178 Roping the Field (计算几何 + dp)
Roping the Field Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 858 Accepted: 250 De ...
- 『HGOI 20190917』Cruise 题解 (计算几何+DP)
题目概述 在平面直角坐标系的第$1$象限和第$4$象限有$n$个点,其中第$i$个点的坐标为$(x_i,y_i)$,有一个权值$p_i$ 从原点$O(0,0)$出发,不重复的经过一些点,最终走到原点, ...
- HDU 4562 守护雅典娜 (计算几何+DP)
守护雅典娜 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submi ...
- Code Chef MINPOLY(计算几何+dp)
题面 传送门 题解 我们枚举这个凸多边形\(y\)坐标最小的点\(p_i\),然后对于所有\(y\)坐标大于等于它的点极角排序 我们预处理出\(s_{j,k}\)表示三角形\(p_i,p_j,p_k\ ...
- bzoj 3778: 共鸣【计算几何+dp】
枚举起点,然后设f[i][j]为上凸壳上一个点是i当前点是j的最大面积,g是下凸壳,然后合并的时候枚举结束点t合并上下凸壳即可 这样的好处是每次转移都是往凸多边形里加一个三角形(s,i,j),所以判断 ...
- SDOI2019 省选前模板整理
目录 计算几何✔ DP 斜率优化✔ 四边形不等式✔ 轮廓线DP✘ 各种分治 CDQ分治✔ 点分治✔ 整体二分✔ 数据结构 线段树合并✔ 分块✔ K-D Tree LCT 可持久化Trie✔ Splay ...
- 2019.03.15 ZJOI2019模拟赛 解题报告
得分: \(20+45+15=80\)(三题暴力全写挂...) \(T1\):Lyk Love painting 首先,不难想到二分答案然后\(DP\)验证. 设当前需验证的答案为\(x\),则一个暴 ...
- HZNU Training 4 for Zhejiang Provincial Collegiate Programming Contest 2019
今日这场比赛我们准备的题比较全面,二分+数论+最短路+计算几何+dp+思维+签到题等.有较难的防AK题,也有简单的签到题.为大家准备了一份题解和AC代码. A - Meeting with Alien ...
随机推荐
- 分享知识-快乐自己:Hibernate对象的三种状态
图解: 1):瞬时状态(Transient) 对象与session没有关联,数据库中没有对应的数据. 一般new出来的对象便是瞬时对象. 对瞬时对象使用save()方法便使之成为持久对象. 由于数据库 ...
- 分享知识-快乐自己:Hibernate框架常用API详解
1):Configuration配置对象 Configuration用于加载配置文件. 1): 调用configure()方法,加载src下的hibernate.cfg.xml文件 Configura ...
- 如何在asterisk中限制呼叫路数
在asterisk中,对于呼叫个数是可以通过call-limit进行限制的.限制办法是通过修改asterisk.conf中maxcalls参数,设置允许的最大呼叫数.这里的最大呼叫数是包括所有的呼 ...
- ACM学习历程—HDU5269 ZYB loves Xor I(位运算 && dfs && 排序)(BestCoder Round #44 1002题)
Problem Description Memphis loves xor very musch.Now he gets an array A.The length of A is n.Now he ...
- ACM学习历程—SNNUOJ 1116 A Simple Problem(递推 && 逆元 && 组合数学 && 快速幂)(2015陕西省大学生程序设计竞赛K题)
Description Assuming a finite – radius “ball” which is on an N dimension is cut with a “knife” of N- ...
- poj2584T-Shirt——网络最大流
题目:http://poj.org/problem?id=2584 以人和衣服作为点,建立超级源点和超级汇点,人连边权为1的边,衣服对源点连边权为件数的边(别弄乱顺序): 试图写构造函数,但CE了,最 ...
- WPF TextBox PreviewTextInput handle IME (chinese)
今天调试自己写的WPF的Behavior, 是关于TextBox只能输入数据或者小数点的. 发现有个问题, 就是英文IME下字母等等都能过滤, 但是一旦切换到中文输入法, 就会发现在OnPreview ...
- hadoop之一:概念和整体架构
什么是hadoop? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.Hadoop是根据Go ...
- ng2中的ng-content用法
用途:1.ng-content用于在组件中嵌入内容 2.ng-content可以在组件中嵌入模板代码,方便定制可复用的组件 select属性支持css选择器,如"#id",&quo ...
- Linux命令总结_查看主机磁盘使用
1.dh -h 查看各个挂载点的使用量 2.du -sh *(星号表示当前所有文件夹)可以查看当前目录下各个文件夹的大小,-s表示只显示当前文件夹(不加-s你可以看到所有文件夹下的子文件夹的大小,太多 ...