题目大意
题目很长,是有关于WOW的一个攻略出的模拟题。
大致意思就是
给你一堆点和一堆圆,问你在符合题意下,最多能连几条线段。
要求如下:
- 线段不能相交,端点重合除外
- 线段不能与圆相交或相切
- 线段两个端点不能相邻,如$(i,i+1)$ 或$(i-1,i)$
- 端点必须最靠外
根据这四条要求,就可以做了…
思路
首先,端点必须最靠外,就是说端点是凸包上的点。就是说 ,先跑个凸包。
其次,线段两个端点不相邻,且不与圆相交或相切,枚举一遍就好了。
最后,考虑线段不相交。线段端点都是凸包上的点,那么只要满足,线段$ab$和线段$cd$,$c<a\&\&b<d$即可。
如图1:
因此题目变成了,求最大线段不相交数量。嗯,显然dp。
然后考虑上面凸包线段不相交的性质,是一种包含关系。可以得出,这是一个区间dp。
然后就是,枚举小区间,再求大区间了。
$dp[i][j]=max(dp[i][j],dp[i][t]+dp[t][j]+dk[i][j]);$
其中,$dk$指的是该线段是否是符合$2$,$3$,$4$的,符合为$1$,不符合为$0$
代码
1 | /* |