Zoj 2868 Incredible Cows (分半dfs暴搜)
来源:互联网 发布:java设置全局编码格式 编辑:程序博客网 时间:2024/06/16 19:21
对于一个超出范围暴搜问题,尝试分一半暴搜求解
/*Zoj 2868 Incredible Cows时间: 2017/02/18题意:将一堆数分成两堆,使两堆和差最小题解:直接暴力2^34,分成两堆优化,将一堆暴力预处理所有可能的和,将和排序后,在另一堆暴力出和后,寻找于第一堆相加最接近sum/2的值,枚举找出最小答案。*/#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <map>using namespace std;#define LL long long#define INF 0x3f3f3f3f#define PI acos(-1.0)#define E 2.71828#define MOD 1000000007#define N 110#define M 5010int a[N],vis[1<<18];int n,m,ans,half,sum;int k;void dfs1(int depth,int val){ if(depth == m) { vis[k++] = val; return ; } dfs1(depth+1,val); dfs1(depth+1,val+a[depth]);}void dfs2(int depth,int val){ if(depth == n) { int id = lower_bound(vis,vis+k,half-val)-vis; if(id < k) ans = min(ans,abs(sum-2*(vis[id]+val))); return ; } dfs2(depth+1,val); dfs2(depth+1,val+a[depth]);}int main(){ int T; scanf("%d",&T); while(T--) { scanf("%d",&n); sum = 0; for(int i = 0; i < n; i++) { scanf("%d",&a[i]); sum += a[i]; } half = sum/2; m = n/2; k = 0; ans = sum; dfs1(0,0); sort(vis,vis+k); dfs2(m,0); printf("%d\n",ans); } return 0;}
0 0
- Zoj 2868 Incredible Cows (分半dfs暴搜)
- ZOJ 2868 Incredible Cows
- zoj 2868 Incredible Cows 二分状态搜索
- Cows Arrangement_foj1898_差分约束
- zoj 1457 dfs水题
- zoj 2100 dfs
- zoj 1711 dfs
- zoj 1204 dfs
- ZOJ 1005 Jugs (DFS)
- ZOJ 1011 NTA (DFS)
- zoj 1089 lotto (DFS )
- zoj 2100 Seeding(dfs)
- 【DFS】ZOJ 1580 Sudoku
- zoj 1002 dfs
- zoj 1002 DFS
- ACM-ZOJ 2110 DFS
- zoj Farm Irrigation dfs
- ZOJ 2580 Sudoku (DFS)
- oj19031903: 有假币
- 进程优先级 nice
- 关于使用 Okhttps,response.body().byteStream(),用decodeStream解析,Bitmap为null的解决方法
- AngularJS 自定义常量服务
- Keras 切换GPU
- Zoj 2868 Incredible Cows (分半dfs暴搜)
- Spring MVC--8.JSON、国际化、文件上传
- task struct
- Java通过代理访问互联网平台提供的WebService接口的一种方法
- MYSQL性能优化详解(一)
- 线程的简单小列子- 龟兔赛跑-继承Thread类
- AngularJS 路由和多视图
- 13.线程间通信
- Linux中内核控制块task_struck