[Meet In Middle] BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
来源:互联网 发布:java接口和引用 编辑:程序博客网 时间:2024/06/15 03:58
hash好慢啊 我打low了?
<span style="font-family:Microsoft YaHei;font-size:14px;color:#000066;">#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int N=20;const int M=1600005;int cnt[1<<N],ans;namespace hashmap{const int P=1030407;struct node{int sta,sum; int next;}G[M];int head[P],inum;inline void add(int sta,int sum){int u=(sum%P+P)%P; G[++inum].sta=sta; G[inum].sum=sum; G[inum].next=head[u]; head[u]=inum;}inline void query(int sta,int sum){int u=(-sum%P+P)%P;for (int p=head[u];p;p=G[p].next)if (G[p].sum==-sum)cnt[sta|G[p].sta]++;}}int n,mid,a[N+5];inline void dfs1(int cur,int sum,int sta){if (cur==mid+1){hashmap::add(sta,sum);return;}dfs1(cur+1,sum,sta);dfs1(cur+1,sum+a[cur],sta|(1<<(cur-1)));dfs1(cur+1,sum-a[cur],sta|(1<<(cur-1)));}inline void dfs2(int cur,int sum,int sta){if (cur==n+1){hashmap::query(sta,sum);return;}dfs2(cur+1,sum,sta);dfs2(cur+1,sum+a[cur],sta|(1<<(cur-1)));dfs2(cur+1,sum-a[cur],sta|(1<<(cur-1)));}const int size[]={0,0,1,2,3,4,5,6,6,7,8,8,8,8,8,8,8,8,8,8,7};int main(){freopen("t.in","r",stdin);freopen("t.out","w",stdout);scanf("%d",&n); if (n==1) return printf("0\n"),0;mid=size[n];for (int i=1;i<=n;i++) scanf("%d",a+i);dfs1(1,0,0);dfs2(mid+1,0,0);for (int i=1;i<(1<<n);i++)if (cnt[i])ans++;printf("%d\n",ans);return 0;}</span>
只能去膜标算
<span style="font-family:Microsoft YaHei;font-size:14px;color:#000066;">#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>using namespace std;typedef pair<int, int> abcd;typedef long long ll;vector<abcd> Solve(const vector<int> &S){vector<abcd> ans;int n=S.size();for (int i=0;i<(1<<n);i++)for (int j=i;;j=(j-1)&i){int sum=0;for (int k=0;k<n;k++)if (j>>k&1) sum-=S[k]; else if (i>>k&1) sum+=S[k];if (sum>=0) ans.push_back(abcd(sum,i));if (j==0) break;}sort(ans.begin(),ans.end());ans.resize(unique(ans.begin(),ans.end())-ans.begin());return ans;}int n,ans;int main(){int x;freopen("t.in","r",stdin);freopen("t.out","w",stdout);scanf("%d",&n);vector<int> SL,SR;for (int i=0;i<n;i++)scanf("%d",&x),i&1?SL.push_back(x):SR.push_back(x);vector<abcd> L=Solve(SL);vector<abcd> R=Solve(SR);int p=0;int q=0;int LS=L.size();int RS=R.size();vector<bool> good(1<<n);while (1){while (p<LS && q<RS && L[p].first!=R[q].first)L[p].first<R[q].first?p++:q++;if (p==LS || q==RS) break;int p2=p;int q2=q;while (p2<LS && L[p2].first==L[p].first) p2++;while (q2<RS && R[q2].first==R[q].first) q2++;for (int i=p;i<p2;i++)for (int j=q;j<q2;j++)good[L[i].second|(R[j].second<<SL.size())]=1;p=p2;q=q2;}ans=count(good.begin()+1,good.end(),true);printf("%d\n",ans);}</span>
0 0
- [Meet In Middle] BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
- bzoj 2679: [Usaco2012 Open]Balanced Cow Subsets 折半搜索
- BZOJ 2679: [Usaco2012 Open]Balanced Cow Subsets meet_in_the_middle / 折半搜索
- 【BZOJ】2679 [Usaco2012 Open]Balanced Cow Subsets 折半搜索+状压
- [USACO 2012OPEN] Balanced Cow Subsets(meet in the middle + DFS)
- bzoj2679 [Usaco2012 Open]Balanced Cow Subsets折半搜索
- 【折半搜索】BZOJ2679(Usaco2012 Open)[Balanced Cow Subsets]题解
- Meet in the middle
- JZOJ2935. 【USACO Open 2012 Gold Division】Balanced Cow Subsets
- USACO2011Open Gold Balanced Cow Subsets
- 【meet in the middle】的几个例题【BZOJ 4800】&【SPOJ ABCDEF】
- BZOJ 4800([Ceoi2015]Ice Hockey World Championship-meet in the middle)
- bzoj 4800: [Ceoi2015]Ice Hockey World Championship meet in the middle
- 编程竞赛技巧:Meet in the middle
- [Meet In Middle] HDU 3017 Treasure Division
- [LA2965][建模][Meet in the middle]侏罗纪
- 一道“暴力题” (meet in the middle)
- SRM 572 D1L2:EllysBulls,Brute Force,meet in the middle
- Best Time to Buy and Sell Stock
- 第一天
- 软件测试分析过程
- uva 10003 Cutting Sticks
- mysql用户名和密码忘记了怎么办?
- [Meet In Middle] BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
- 安装VTK 7.0.0 并新建自己的工程
- SpringMVC访问静态资源的三种方式
- Android studio 上传svn项目
- 1031. 查验身份证(15)
- 计算机网络学习方法
- C语言实验——字符编码
- BitmapUtils缓存图片
- 前景检测算法(十三)--KDE2000