题意:


思路:
这题巨坑!!!
这题巨坑!!!
这题巨坑!!!
这题巨坑!!!
这题巨坑!!!

(而且没有题解…….5555555……)
只能照着自己想的写了……

  • 先求出来凸包
    求凸包的方法呢:先找出来左下角的点 然后按照极角排序就OK了。
    我用了两边sort
    sort(point+1,point+1+n,cmp);
    sort(point+2,point+1+n,cmp2);
    第一遍sort:
bool cmp(Point a,Point b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;
}

找出来左下角的点
第二遍sort:

bool cmp2(Point a,Point b){return (long long)(a.x-point[1].x)*(b.y-point[1].y)-(long long)(a.y-point[1].y)*(b.x-point[1].x)>0;}

按照极角找到了凸包 (注意是从2号点开始排的序)
Caution: tmd一定要用long long 100000*100000会挂的很惨 (我就是有一个点死活过不去 幸亏队长比较机智)

  • 两边for暴力枚举一下两个柱子中间是否能连线段(相邻的不能连 所以j就从i+2–>n枚举好了)
    一定要注意i=1&j=n的情况 (否则自己怎么死的都不知道)
    ok[i][j]表示i能跟j相连
    for(int i=1;i<=n;i++)for(int j=i+2;j<=n;j++)if(check(i,j)&&(i!=1||j!=n))ok[i][j]=1;
  • 接下来就要挟坑爹的check函数了……
    我的方法是余弦定理乱搞(乱搞都写错了……)
    设A, B为线段的两个端点,C为圆心。
    圆心到线段的距离<=r就不能连….
    怎么求圆心到线段的距离呢 这时候要分情况讨论了

1.角A或者角B为钝角 这个时候只需判断AC和BC的距离是否大于r就OK了 (一开始我没有想到这个 挂的很惨)
2.知道三边 能够求出cosa(COSA=(B*B+C*C-A*A)/(2*B*C))
继而倒出SINA(cosa*cosa+sina*sina=1)
这个时候我发现 WOC!我的精度!!!!(OMG) 因为有些误差,相切的情况我没有判出来 囧么办? +个eps好了….
于是我就加了个eps

  • 随后就是区间DP了
    f[i][j]=max(f[i][k]+f[k][j])+ok[i][j]
    (没有人傻到像我一样先枚举i,j,再枚举k了吧……)
    (然后我就果断改了啊)
    for(int lenth=2;lenth<=n;lenth++)for(int start=1;start<=n;start++){int end=start+lenth;for(int k=start+1;k<min(end,n);k++)f[start][end]=max(f[start][end],f[start][k]+f[k][end]);f[start][end]+=ok[start][end];}

这题真是步步为坑啊……………….

// by SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
bool ok[255][255];
int n,g,r,f[255][155];
struct Point{int x,y;}point[255];
struct Circle{int x,y;}circle[255];
bool check(int a,int b){double sx=1.0*point[a].x,sy=1.0*point[a].y;double ex=1.0*point[b].x,ey=1.0*point[b].y;double C=sqrt(1.0*(sy-ey)*(sy-ey)+1.0*(sx-ex)*(sx-ex));for(int i=1;i<=g;i++){double A=sqrt((circle[i].x-sx)*(circle[i].x-sx)+(circle[i].y-sy)*((circle[i].y-sy)));double B=sqrt((circle[i].x-ex)*(circle[i].x-ex)+(circle[i].y-ey)*((circle[i].y-ey)));double COSA=(B*B+C*C-A*A)/(2*B*C);double COSB=(A*A+C*C-B*B)/(2*A*C);if(COSA<1e-10||COSB<1e-10){if(A<1.0*r+1e-10||B<1.0*r+1e-10)return 0;else continue;}double SINA=sqrt(1-COSA*COSA);double H=B*SINA;if(H<1.0*r+1e-10)return 0;}return 1;
}
bool cmp(Point a,Point b){if(a.x==b.x)return a.y<b.y;return a.x<b.x;
}
bool cmp2(Point a,Point b){return (long long)(a.x-point[1].x)*(b.y-point[1].y)-(long long)(a.y-point[1].y)*(b.x-point[1].x)>0;}
int main(){scanf("%d%d%d",&n,&g,&r);for(int i=1;i<=n;i++)scanf("%d%d",&point[i].x,&point[i].y);sort(point+1,point+1+n,cmp);sort(point+2,point+1+n,cmp2);for(int i=1;i<=g;i++)scanf("%d%d",&circle[i].x,&circle[i].y);for(int i=1;i<=n;i++)for(int j=i+2;j<=n;j++)if(check(i,j)&&(i!=1||j!=n))ok[i][j]=1;for(int lenth=2;lenth<=n;lenth++)for(int start=1;start<=n;start++){int end=start+lenth;for(int k=start+1;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[1][n]);
}

整整写了一天啊……….

转载于:https://www.cnblogs.com/SiriusRen/p/6532328.html

POJ 3178 凸包+DP (巨坑)相关推荐

  1. synplify成功运行起designware的方法,巨坑

    因为手头FPGA是zynq ultrascale+.所以更新了synplify到2019版本.手里的项目必须要用designware来做验证.各种研究,填了N多的坑.终于搞定. 先说原理: 1. 电脑 ...

  2. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    [走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 参考文章: (1)[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 ( ...

  3. 【单页应用巨坑之History】细数History带给单页应用的噩梦

    前言 在我们日常的网页浏览中,我们非常喜欢做一个操作:点击浏览器的前进后退 在Ajax技术出现后,有些时候前进后退就会给开发者带来困扰,甚至一些开发者试图去干掉History 随着Html5的发展,移 ...

  4. 巨坑!同事离职前一天,偷偷将一个470欧的色环电阻串进我的电源线中......

    作者:晓宇,排版:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 1.大自然的三极管模型,小电流"控制"大电流,网友直呼,一图解开了我多年的疑惑,不过,还是下面的水龙头 ...

  5. 沙漠上不小心挖了个洞,让这个地狱之门般的巨坑,燃烧了50年

    全世界只有3.14 % 的人关注了 爆炸吧知识 在土库曼斯坦的卡拉库姆沙漠深处,有一个神奇的巨坑,直径约为70米,它无论白天还是黑夜,永远都在燃烧. 这个坑的周围一片荒芜,坑里也没有任何明显在助燃的东 ...

  6. Tomcat Get请求的巨坑

    转载自  Java程序员注意:Tomcat Get请求的巨坑! Tomcat8.5,当Get请求中包含了未经编码的中文字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了. Tomcat报 ...

  7. SpriteKit在复制节点时留了一个巨坑给开发者,需要开发者手动把复制节点的isPaused设置为false...

    根据When an overlay node with actions is copied there is currently a SpriteKit bug where the node's is ...

  8. qjsonarray 合并_QJsonObject和QJsonArray的巨坑

    最近用Qt的QJsonObject和QJsonArray当做类变量来存储运行信息,发现这两货真的是巨坑.让人有一种JJ fly的感觉/(ㄒoㄒ)/~~. 写了个例子来说明下: MainWindow:: ...

  9. Flutter打包apk中的一些巨坑

    许多人在使用Flutter打包apk时都会参照文档的做法,但是按照文档基本上是百分之百失败的[手动狗头],官网的做法是这样的(可以不用看) 官网做法 但是方法基本不可行. 下面介绍一下正确的打包姿势 ...

  10. Fire (poj 2152 树形dp)

    Fire (poj 2152 树形dp) 给定一棵n个结点的树(1<n<=1000).现在要选择某些点,使得整棵树都被覆盖到.当选择第i个点的时候,可以覆盖和它距离在d[i]之内的结点,同 ...

最新文章

  1. linux计划任务怎么做,做linux计划任务的步骤
  2. centos7 docker 安装 otter 注意事项
  3. 邮件的一个推送这个系统怎么去搭建的摘抄:感觉有很多的开源的邮件服务器可以参考使用搭建,据说wordpress有集成服务
  4. vue 音乐盒app_VBox 一款基于vue开发的音乐盒 序章
  5. Matlab传递函数的几种生成方式
  6. 蚂蚁分类信息系统 5.8 信息浏览量后台自定义设置
  7. go中的make和new的区别
  8. (一)HBase基础介绍
  9. hash ruby 定义 嵌套_Ruby:合并嵌套哈希
  10. pr导入srt字幕显示因文件头错误而不能打开,或pr导入字幕乱码
  11. gateway自定义负载均衡策略
  12. Linux下基础命令(二)
  13. 【教程】非常好用!一键彻底关闭Win10自带Windows Defender杀毒软件
  14. Scipy_常用统计函数
  15. Quartz的一般配置方法
  16. 联想IdeaPad 310S重装系统过程
  17. c程序的基本组成单位是什么?
  18. 【大学物理实验】弦振动的研究
  19. 图片按钮+自定义形状
  20. 杭州2.0之新挑战、新梦想

热门文章

  1. 对样式overflow的学习
  2. Windows Server2012 R2中安装SQL Server2008
  3. Centos 7安装Docker可视化管理面板安装中文Portainer
  4. font-spider(字蛛) 让页面引入中文web字体
  5. 监听套接字为什么要设置成非阻塞的?
  6. 带你了解HTTP协议(二)
  7. python字符串长度排序_python-对混合类型和不同长度的字符串进行排序
  8. 大数据Hadoop学习记录(1)----HDFS目录和文件Shell操作
  9. 碧桂园博智林机器人总部大楼_博智林机器人谷总部大楼完工
  10. pythonsqlite导出json_使用python将mysql数据库的数据转换为json数据