2018-10-16多校连测1

T1 (折半搜索)

题意:

给定一个序列,求有多少个非空子集,能划分成和相等的两份。

 

即[Usaco2012 Open]Balanced Cow Subsets;

数据范围n<=20,mi<=1e8,测试时打了个暴搜过了60分,

转化一下模型能知道对于每个数来说只会有3种情况,

1、没有被选;

2、被选进左边集合;

3、被选进右边集合。

如果暴力枚举所有的可能3^n明显会超时,

所以我们可以用meet in the middle的思想,即折半搜索。

先枚举左边的情况,再枚举右边的情况,最后把两种情况都排一遍序。

时间复杂度O(玄学)。

 

T3

题意:

n件行李,k个背包且允许背包为空;

选择一个x,给所有行李质量+x并%P。

选择一个x使最重的背包尽量轻。

对于 20%的数据 n<=20,P<=50。

对于 40%的数据 n<=1000,P<=1000。

对于 100%的数据 n<=10000,P<=10000。

 

首先很显然枚举+二分答案可以拿到40分,

然后考虑对x枚举的顺序进行随机,每次枚举x可以先check是否比目前的最优解更优,

如果是则继续二分,否则continue;

按照题解说由于一个随机排列中比前面所有数都大的数的数量期望为log,

所以复杂度为O(nP+nlognlogP)。

posted @ 2018-10-16 16:25  Dingwenh  阅读(104)  评论(0编辑  收藏  举报