二分答案全攻略

当直接求解答案比较困难时,可以枚举答案,再判断枚举得到的这个答案是否合法。
如果这个答案还具有单调性,就可以用二分加速枚举过程。

Kth Largest(http://acm.hrbeu.edu.cn/index.php?act=problem&id=1005&cid=14)(二次二分)
题意:
 A,B两个数组,求出两个数组互相乘以后生成的n*n个数中的第k大的数。

解法:
  对A,B从小到大排序。
  二分第k大的数的值ans。
  判定过程:sum置0,枚举指向A的i,二分B中的j,找到A[i]*B[j]>=ans的最小的j,将n-j+1累加到sum中,sum==k这ans合法否则不合法。
  最后算出ans再进行微调。

代码:

 
A Task Proces(http://acm.hdu.edu.cn/showproblem.php?pid=3433)(二分加DP)
题意:
  有x个任务A,y个任务B,有n个人做A的时间和做B的时间不一样。问最少的做完所有x个A任务和y个B任务的时间。

解法:
  二分做完的时间,对每个人计算:在该时间内,他在做了u个A任务的情况下还能做多少个B任务,记为f[i][u].然后进行一下DP,DP[i][u]表示前i个人在时间限制内做了u个任务的同时还能做多少个B

任务。DP[i][u]=max{dp[i-1][u-x]+F[i][x]},最后判断DP[n][x]>=y是否成立即可。

代码:


organ(http://acm.nbu.edu.cn/JudgeOnline/showproblem?problem_id=1820)(二分加贪心)
题意:
 将一棵树分成m份,使每份节点的最小权值最小,求这个最小值。
解法:
先二分答案转换成判定性问题,判定的时候可以用贪心,从叶子节点往根节点枚举,如果当前子树能力和大于等于二分的那个平均值,就直接把这个子树独立为一组。到最后如果独立出来的组数大于等

于m,即当前二分的解是一个可行的解。
代码:

Defend the Bases(http://acm.cs.ecnu.edu.cn/problem.php?problemid=2595)(二分加匹配)
题意:
  n个部队要开赴n个地方,每个部队到每个地方有个距离,求一个部队开赴指派方案,使最少的时间内所有地方都有部队到达。

解法:
 二分到达时间,判断是否能得到完美匹配,能就可行,否则不可行。
代码:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值