舞蹈链重复覆盖问题
题目
http://acm.hdu.edu.cn/showproblem.php?pid=2295
题意
给出n个城市,m个雷达站,以及它们的坐标,每个雷达站有一个自身为中心的圆形覆盖范围,每个雷达站的覆盖范围半径R相等。现在要使得每个城市都能被雷达站覆盖,且最多只能启用k个雷达站,求满足条件的R的最小值。
题目解析
二分搜索R的范围,对于每个范围的中值,先假设R等于这个中值,然后构建一个m×n的矩阵,矩阵的第i行第j列表示第i个雷达是否能覆盖第j个城市,如果能为1,否则为0。然后用舞蹈链的重复覆盖算法来,判断覆盖所有城市最少需要的雷达站个数p。最后根据p是否大于k来更新R的范围,直到小于精度值。
这里精度值最好设小一点,设成1e-6就WA了。
代码
1 | /* http://acm.hdu.edu.cn/showproblem.php?pid=2295 */ |