总结-分治

来源:互联网 发布:oa流程数据库设计 编辑:程序博客网 时间:2024/05/29 06:39

分治

分治法是一种效率很高的算法, 往往带有一个log级的复杂度.

1. CDQ分治

  • CDQ分治可以应用到带有修改操作的题目中, 对操作进行分治, 通过考虑前一半操作对后一半操作的影响达到分治的目的.
  • 应用的条件比较苛刻
  • BZOJ-1492-货币兑换cash-NOI2007-CDQ分治 优化dp
  • BZOJ-2716-天使玩偶angel-CDQ分治 能这样做还得益于曼哈顿距离的特殊性
  • BZOJ-2001-city城市建设-HNOI2010-CDQ分治 因为最小生成树Kruskal算法是基于边的算法, 所以可以对边进行分治

2. 二分答案

  • 路由器安置(Routing) 二分答案, 然后用到二分查找. 比较巧妙地是二分半径而不是直径, 这样可以避免出现小数.
  • BZOJ-3110-K大数查询-ZJOI2013-整体二分 整体二分的做法是比较BT的, 因为答案有上下界, 而且答案一定是前面的操作造成的, 所以直接对答案进行二分. 用到了线段树维护(也可以用树状数组). 思考: CDQ能做吗?
  • BZOJ-2440-完全平方数-中山市选2011-容斥原理-莫比乌斯函数-二分查找 二分答案用容斥原理判断.

3. 三分法

  • BZOJ-1857-传送带-SCOI2010 两次三分. 因为是两个单峰函数.

总结: 分治的思想很重要, 考场上如果能想到正确解法的话只要思路清晰, 代码难度适中吧.

1 0
原创粉丝点击