BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets
题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=2679
题解
meet in the middle,枚举左边放在第一个集合,第二个集合还是不放,记录左边能得到的差值和左边的选取状态,右边同理,最后two-pointer扫一下,记录选取状态有没有被考虑过,时间复杂度O(2×3n/2)O(2\times 3^{n/2})O(2×3n/2)。
代码
#include <cstdio>
#include <algorithm>int read()
{int x=0,f=1;char ch=getchar();while((ch<'0')||(ch>'9')){if(ch=='-'){f=-f;}ch=getchar();}while((ch>='0')&&(ch<='9')){x=x*10+ch-'0';ch=getchar();}return x*f;
}const int maxn=20;
const int maxk=59049;
const int maxs=1<<maxn;struct data
{int v,con;bool operator <(const data &other) const{if(v==other.v){return con<other.con;}return v<other.v;}
};data tmp[maxk+10],f[maxk+10],g[maxk+10];
int tot,totf,totg,op[maxn+2],n,v[maxn+2],vis[maxs+10],ans;int search(int x,int mx)
{if(x>mx){int last=0,con=0;for(int i=1; i<=n; ++i){last+=v[i]*op[i];if(op[i]){con|=1<<(i-1);}}tmp[++tot].v=last;tmp[tot].con=con;return 0;}for(int i=-1; i<=1; ++i){op[x]=i;search(x+1,mx);}return 0;
}int main()
{n=read();for(int i=1; i<=n; ++i){v[i]=read();}if(n==1){puts("1");return 0;}search(1,n/2);std::sort(tmp+1,tmp+tot+1);for(int i=1; i<=tot; ++i){f[i]=tmp[i];}totf=tot;tot=0;for(int i=1; i<=n/2; ++i){op[i]=0;}search(n/2+1,n);std::sort(tmp+1,tmp+tot+1);for(int i=1; i<=tot; ++i){g[i]=tmp[i];}totg=tot;int nowf=1,nowg=totg;while((nowf<=totf)&&(nowg>0)){while((nowg>0)&&(f[nowf].v+g[nowg].v>0)){--nowg;}if(f[nowf].v+g[nowg].v==0){int pastf=nowf,pastg=nowg;while((nowf<totf)&&(f[nowf].v==f[nowf+1].v)){++nowf;}while((nowg>1)&&(g[nowg].v==g[nowg-1].v)){--nowg;}for(int i=pastf; i<=nowf; ++i){for(int j=nowg; j<=pastg; ++j){if(!vis[f[i].con|g[j].con]){vis[f[i].con|g[j].con]=1;++ans;}}}}++nowf;}printf("%d\n",ans-1);return 0;
}
转载于:https://www.cnblogs.com/Canopus-wym/p/10376116.html
BZOJ 2679 [Usaco2012 Open]Balanced Cow Subsets相关推荐
- SP11469 SUBSET - Balanced Cow Subsets(折半搜索+状态压缩)难度⭐⭐⭐⭐★
题目链接 SP11469 SUBSET - Balanced Cow Subsets 题目翻译 给出N(1≤N≤20)N(1≤N≤20)N(1≤N≤20)个数M(i)(1<=M(i)<=1 ...
- BZOJ.2679.Balanced Cow Subsets(meet in the middle)
BZOJ 洛谷 \(Description\) 给定\(n\)个数\(A_i\).求它有多少个子集,满足能被划分为两个和相等的集合. \(n\leq 20,1\leq A_i\leq10^8\). \ ...
- P3067 [USACO12OPEN]Balanced Cow Subsets G 折半搜索
传送门 文章目录 目录 题意: 思路: 目录 题意: 给你nnn个数,从中任意选出一组数,使这些数能分成和相等的两组,问有多少种选数方案. 2≤n≤20,1≤ai≤1e92\le n\le 20,1\ ...
- [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup
1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec Memory Limit: 64 MB Submit: 697 Solved: 463 ...
- 【BZOJ】3301: [USACO2011 Feb] Cow Line(康托展开)
http://www.lydsy.com/JudgeOnline/problem.php?id=3301 其实这一题很早就a过了,但是那时候看题解写完也是似懂非懂的.... 听zyf神犇说是康托展开, ...
- BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换
Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加"年度最佳老农"的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛 ...
- bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会 -- Tarjan
1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会 Time Limit: 5 Sec Memory Limit: 64 MB Description The N (2 & ...
- bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列
3377: [Usaco2004 Open]The Cow Lineup 奶牛序列 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 49 Solve ...
- bzoj 1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会(Trajan)
1654: [Usaco2006 Jan]The Cow Prom 奶牛舞会 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 380 Solved: 2 ...
最新文章
- GLSL学习笔记 - 6.2 Vertex Shader
- php文件上传绕过mime类型,文件上传限制绕过技巧
- JDBC+Servlet+JSP整合开发之22.JSP简介
- iframe 的一点经历
- sql 语言中 when case 用法
- 信号灯文件锁linux线程,linux——线程同步(互斥量、条件变量、信号灯、文件锁)...
- db2 删除存储过程_蚂蚁金服OceanBase挑战TPCC | TPCC基准测试之存储优化
- 个人帐目管理系统java_Java 项目 个人帐目管理系统
- java datetime long_Android Java datetime值从String到Long到String问题
- ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作...
- detectron2 demo cuda10.0 py3.6
- 如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
- 前端工程化和Reactjs的模式
- 7-8-无向图的关节点-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
- 东线报接口 全网一手线报全网(京东,淘宝,天猫)最全优惠信息
- C1认证学习笔记(第一章)
- 解决Please define the NDK_PROJECT_PATH variable to point to it.
- 分布式mysql cobar_Mysql分布式中间件:Cobar server
- Asterisk内核 拾遗
- 理解JPEG图像压缩算法,DCT变换