HDOJ 4016 Magic Bitwise And Operation(Dfs剪枝)
2017-08-16 16:56
295 查看
if we do no cutting edge strategy in this dfs problem,we will get a TLE,so here is the cutting edge : if we find a solution that is bigger than ans we have after doing the AND operation to the end , we can just cut down from the current number. So we need to get a result of suffix AND sum from all the number we get.
#include <bits/stdc++.h> #include <cstring> #define ll long long #define inf 0x7fffffffffffffff using namespace std; ll num[50],a[50]; ll ans; int n,k; int vis[50]; void dfs(int pos,ll pre,int step) { // cout<<pos<<" "<<pre<<" "<<step<<endl; if(pre < ans) { ans = pre; } if((pre & a[pos]) >= ans) { return; } if(pos == n || step == k) { return ; } dfs(pos+1,pre,step); dfs(pos+1,pre&num[pos],step+1); } int main() { int ca,cat = 1; cin>>ca; while(ca--) { cin>>n>>k; for(int i=0;i<n;i++) { cin>>num[i]; } sort(num,num+n); a[n-1] = num[n-1]; for(int i=n-2;i>= 0;i--) { a[i] = num[i] & a[i+1]; } memset(vis,0,sizeof(vis)); ans = inf; dfs(0,inf,0); cout<<"Case #"<<cat++<<": "; cout<<ans<<endl; } return 0; }
相关文章推荐
- hdu 4016 Magic Bitwise And Operation(dfs)
- 解题报告:HDU_4016 Magic Bitwise And Operation 简单dfs
- HDU 4016 Magic Bitwise And Operation 暴搜+剪枝
- Hdu 4016 Magic Bitwise And Operation (暴搜 dfs)
- HDU 4016 Magic Bitwise And Operation (暴搜)
- The 36th ACM/ICPC Asia Regional Shanghai Site —— Warmup hdu 4016 Magic Bitwise And Operation
- [搜索] hdu 4016 Magic Bitwise And Operation
- HDU 4016 Magic Bitwise And Operation
- Hdu 4016 Magic Bitwise And Operation
- hdu 4016 Magic Bitwise And Operation 搜索
- HDU 4016 Magic Bitwise And Operation(dfs+剪枝)
- [搜索] hdu 4016 Magic Bitwise And Operation
- HDOJ5113 Black And White【dfs+剪枝】
- hdoj 5113 Black And White DFS+剪枝
- hdoj 5113 Black And White(dfs, 剪枝)
- HDOJ 1312 Red and Black (DFS)
- HDOJ 5416 CRB and Tree DFS
- [DFS+剪枝]POJ 1011/HDOJ 1455/HOJ 1049 Sticks
- D. Lizards and Basements 2(DFS+最优性剪枝)
- hdoj 1312 Red and Black【DFS】