
折半枚举
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
POJ2785-4 Values whose Sum is 0
如题,有四个数组,分别从四个数组中挑选一个数字使得四个数字之和为0,问有多少种这样的组合。 四个数组总共有n^4种情况,但是如果使用用折半枚举的方法,只需枚举出数组A与数组B中n^2中情况,将这些情况排序后就可以用二分搜索将算法的复杂度降低到n^2logn.#include <cstdio> #include <algorithm>using namespace std;const int max原创 2016-08-10 16:30:27 · 255 阅读 · 0 评论 -
POJ3977-Subset
35个数字意味着2^35种可能性,穷举是不可能的,因此我们采用二分搜索。 首先枚举一半的可能性存入map容器中,并不断更新答案,因为有可能这一部分中的答案就是最后的答案。同样枚举另一半的可能性,更新答案,但是要注意与上一部份的答案相结合。#include <cstdio> #include <map> #include <algorithm>using namespace std;typedef原创 2016-08-13 16:50:21 · 382 阅读 · 0 评论 -
POJ2549-Sumsets
这道题可以将a+b+c=d改为a+b=d-c,然后折半枚举d-c的所有可能性,然后找出是否存在a+b满足条件即可。#include <cstdio> #include <algorithm>using namespace std;const int maxn = 1000 + 5;int s[maxn];int main(int argc, char const *argv[]) { int原创 2016-08-14 09:58:12 · 403 阅读 · 0 评论