以下是引用卧龙孔明在2010-8-16 09:18:33的发言:
这个题不难的
首先可以观察到对于这样两个区间(满足包含关系)
[ ]
[ ]
只需要覆盖较小的区间即可(忽略大的不影响结果)。
因此先对n个线段进行预处理,并对其按照左端点排序,即形成不多于n个互不包含的区间。
类似下图
[ ]
[ ]
[ ]
[ ]
[ ]
问题转化为放上最少的点覆盖这些区间。
显然,存在一种最优覆盖,使其所有的点都在区间端点上。这样就可以dp了。
dp方程
设f表示第i个端点放图钉,覆盖i即i之前所有线段的最小端点数
则f = min{f[j]}+1 其中j(j
再处理下边界就可以了,复杂度为O(n^2)
另外,这个题应该可以贪心,可以将复杂度降得更低。
这个题不难的
首先可以观察到对于这样两个区间(满足包含关系)
[ ]
[ ]
只需要覆盖较小的区间即可(忽略大的不影响结果)。
因此先对n个线段进行预处理,并对其按照左端点排序,即形成不多于n个互不包含的区间。
类似下图
[ ]
[ ]
[ ]
[ ]
[ ]
问题转化为放上最少的点覆盖这些区间。
显然,存在一种最优覆盖,使其所有的点都在区间端点上。这样就可以dp了。
dp方程
设f表示第i个端点放图钉,覆盖i即i之前所有线段的最小端点数
则f = min{f[j]}+1 其中j(j
再处理下边界就可以了,复杂度为O(n^2)
另外,这个题应该可以贪心,可以将复杂度降得更低。
我也觉得可以是用贪心,先按纸片的长度排序。
但是复杂度可能不会比dp更低。