ACM——分治
倚剑笑紅尘
教练,我想学kaldi!
展开
-
hdu1007 找最近点对问题(一)
题目链接:题目大意:给出n个点,求出最近的两个点的距离,最后输出时候这个距离再除以2.思路: 蛮力算法复杂度很明显为O(N^2)不理想。如果是O(N*logN)就好多了,下面介绍分治算法在解决该问题的具体应用过程。 假设平面上的点按x排序好了,这样最多增加O(N*logN),这再整个算法来看并没有增加复杂度级别。 排好序后,可以划一条垂线,把点集分成原创 2017-08-08 15:26:43 · 395 阅读 · 0 评论 -
poj3714 Raid 找最近点对问题(二)
题目链接:poj3714题目大意:平面上有两类点,计算属于不同类的顶点对的最小值。思路:计算几何求最近点对的变种。如何求最近点对,在hdu1007 找最近点对问题(一)中已经介绍过。这个题属于变种吧,要求两个点分别属于不同集合。就是在返回长度的时候判断是否属于同一集合,若属于同一个集合,就返回一个很大的数,我用的2e10。如果不属于同一个集合,才能计算距离,原创 2017-08-08 15:53:24 · 231 阅读 · 0 评论 -
Superset CodeForces - 97B(分治基础)
题目链接:点击打开链接题意:给定一个点集添加一些点后再把这个点集输出来。添加完点后使得对于点集内任意2个点都满足下面2条中至少一条1、在同一水平线上或在同一垂直线上2、所围成的矩阵里有其他点。(包含边界)要求的添加的点数尽量少思路:平面分治先把点按x轴排序,然后找到中间的点,做一条直线 x = a[mid].x;然后把所有点都投影到这条直线上,那么对原创 2017-08-08 16:55:09 · 356 阅读 · 0 评论 -
codeforces 448C C. Painting Fence(分治+dp)
题目链接:点击打开链接题目大意:给出n个杆子,每个杆子有一个长度,每次可以刷一行或一列,问最少刷多少次可以将整个墙刷成黄色。思路:首先我们能够想到,如果横着刷,为了得到最优解,当前刷的位置的下面也必须横着刷,然后对于每种情况都可以通过n次竖着刷得到整个黄色的墙。所以我们采取分治的策略进行动态规划,也就是对于每个状态划分为两种情况讨论,如果要刷横向的话,最矮要刷到最矮的柱子的高度才可原创 2017-08-25 23:19:14 · 283 阅读 · 0 评论