bzoj2679 [Usaco2012 Open]Balanced Cow Subsets折半搜索
2017-04-24 21:04
429 查看
每个数可以选,不选。
不选可以分成被选到另外一个集合或者不被任何集合选择。
对应系数是1 0 -1。。
那么分成两半搜索,然后用双指针统计答案。
具体见code 现在才知道折半搜索就是meet in the middle
不选可以分成被选到另外一个集合或者不被任何集合选择。
对应系数是1 0 -1。。
那么分成两半搜索,然后用双指针统计答案。
具体见code 现在才知道折半搜索就是meet in the middle
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fd(i,a,b) for(int i=a;i>=b;i--) using namespace std; int n,m; const int N=1e5+5; int vis[N*20]; int a ,ans,cnt1,cnt2; struct node { int now,s; }b ,c ; bool cmp1(node a,node b) { return a.s<b.s; } bool cmp2(node a,node b) { return a.s>b.s; } inline void dfs(int x,int y,int sum,int now) { if (x>y) { if (y==n/2) { b[++cnt1].s=sum; b[cnt1].now=now; } else { c[++cnt2].s=sum; c[cnt2].now=now; } return; } dfs(x+1,y,sum,now); dfs(x+1,y,sum-a[x],now+(1<<(x-1))); dfs(x+1,y,sum+a[x],now+(1<<(x-1))); } int main() { scanf("%d",&n); fo(i,1,n)scanf("%d",&a[i]); dfs(1,n/2,0,0); dfs(n/2+1,n,0,0); sort(b+1,b+1+cnt1,cmp1); sort(c+1,c+1+cnt2,cmp2); int i=1,j=1; ans=0; while (i<=cnt1&&j<=cnt2) { while (c[j].s>-b[i].s&&j<=cnt2)j++; int k=j; while(j<=cnt2&&c[j].s==-b[i].s) { if (!vis[b[i].now|c[j].now]) { vis[b[i].now|c[j].now]=1; ans++; } j++; } if (b[i].s==b[i+1].s&&i<cnt1)j=k; i++; } printf("%d\n",ans-1); return 0; }
相关文章推荐
- BZOJ2679 : [Usaco2012 Open]Balanced Cow Subsets
- bzoj 2679: [Usaco2012 Open]Balanced Cow Subsets 折半搜索
- BZOJ2679: [Usaco2012 Open]Balanced Cow Subsets
- bzoj2679:[Usaco2012 Open]Balanced Cow Subsets
- BZOJ_2679_[Usaco2012 Open]Balanced Cow Subsets _meet in middle+双指针
- BZOJ2679: [Usaco2012 Open]Balanced Cow Subsets
- [Meet In Middle] BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
- 【BZOJ】2679: [Usaco2012 Open]Balanced Cow Subsets
- 【折半搜索】BZOJ2679(Usaco2012 Open)[Balanced Cow Subsets]题解
- 【BZOJ】2679 [Usaco2012 Open]Balanced Cow Subsets 折半搜索+状压
- BZOJ 2679: [Usaco2012 Open]Balanced Cow Subsets meet_in_the_middle / 折半搜索
- BZOJ 1605 [Usaco2008 Open]Crisis on the Farm 牧场危机 DP
- [BZOJ 2442][Usaco2011 Open]修剪草坪:单调队列
- bzoj1572 [Usaco2009 Open]工作安排Job
- bzoj1689: [Usaco2005 Open] Muddy roads 泥泞的路
- 【bzoj2442】【Usaco2011 Open】修剪草坪【dp+单调队列】
- [BZOJ1663] [Usaco2006 Open]赶集(spfa最长路)
- bzoj 3126: [Usaco2013 Open]Photo——单调队列优化dp
- BZOJ1621: [Usaco2008 Open]Roads Around The Farm分岔路口
- 【BZOJ】3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)