Partition problem(枚举,搜索+剪枝,好题啊)

把2n个人分成n+n两组,那么一共是\binom{2n}{n}种情况,如果每一次都暴力计算竞争力总和,那么每一次的时间复杂度将是O(n^2),总时间复杂度是\binom{2n}{n}*n^{2},对于n≤14这个数据范围来说是过不去的。

考虑如何惰性计算这个竞争力总和,也就是说从状态A转移到状态B的时候根据状态的变化来计算贡献,这是一个常用的思路。

一种很巧妙的思路:算贡献的时候不用加,用减。

假设当前没有分组的变量的竞争值就是\sum_{i=1}^{2n}\sum_{j=i+1}^{2n}v[i][j],每次将一个元素分到某一组后,这个元素和原来这个组里的所有元素的贡献需要减去,那么在n+n全分配完之后得到的结果就是还没有被“割断”的“边”。这样做有个好处就是有一个可以减枝的条件:如果当前还没有被“割断”的“边”的总和已经小于当前的最大值了,这条路就没有必要继续枚举了,这样就快了很多。

时间复杂度O(

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值