常用技巧
文章平均质量分 77
lolicon480
这个作者很懒,什么都没留下…
展开
-
poj2549 Sumsets(折半枚举)
题目大意: 给定一个整数数列,从中选出一个四个不同的元素a,b,c,d组成一个新的集合,使得a+b+c=d,求得满足条件的最大的d,否则输出no solution。 解决方法: 这一题如果使用传统的枚举方法,时间复杂度在C(3,n),肯定超时。所以要使用折半枚举,这题折半枚举和其他题不同的是,以前都是将数据折半进行枚举,而这题要对公式进行变形,变形成a+b=d-c,这样两边的枚举的时间复杂度原创 2015-03-09 11:26:07 · 533 阅读 · 0 评论 -
poj3977 Subset(折半枚举)
题目大意: 给定N个整数组成的数列(N 思路: 如果单纯的枚举的话,这N个数分别有选和不选两种,所以一共有2^35个子集。很明显,会超时,但是我们可以将这个整数数列分成两半,可得每边最多18个,如果分别进行枚举的话,复杂度可以降到O((N/2)²),即最多2^18,在可接受范围内。然后枚举其中一个子集,二分查找与他组成绝对值最小的子集。在这里我们使用了stl::map这个类库,里面封装了红黑原创 2015-03-09 11:39:52 · 1952 阅读 · 0 评论