题目链接

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相关推荐

  1. 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 ...

  2. BZOJ.2679.Balanced Cow Subsets(meet in the middle)

    BZOJ 洛谷 \(Description\) 给定\(n\)个数\(A_i\).求它有多少个子集,满足能被划分为两个和相等的集合. \(n\leq 20,1\leq A_i\leq10^8\). \ ...

  3. P3067 [USACO12OPEN]Balanced Cow Subsets G 折半搜索

    传送门 文章目录 目录 题意: 思路: 目录 题意: 给你nnn个数,从中任意选出一组数,使这些数能分成和相等的两组,问有多少种选数方案. 2≤n≤20,1≤ai≤1e92\le n\le 20,1\ ...

  4. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 697  Solved: 463 ...

  5. 【BZOJ】3301: [USACO2011 Feb] Cow Line(康托展开)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3301 其实这一题很早就a过了,但是那时候看题解写完也是似懂非懂的.... 听zyf神犇说是康托展开, ...

  6. BZOJ 1640: [Usaco2007 Nov]Best Cow Line 队列变换

    Description FJ打算带着他可爱的N (1 ≤ N ≤ 2,000)头奶牛去参加"年度最佳老农"的比赛.在比赛中,每个农夫把他的奶牛排成一列,然后准备经过评委检验. 比赛 ...

  7. 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 & ...

  8. bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列

    3377: [Usaco2004 Open]The Cow Lineup 奶牛序列 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 49  Solve ...

  9. 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 ...

最新文章

  1. GLSL学习笔记 - 6.2 Vertex Shader
  2. php文件上传绕过mime类型,文件上传限制绕过技巧
  3. JDBC+Servlet+JSP整合开发之22.JSP简介
  4. iframe 的一点经历
  5. sql 语言中 when case 用法
  6. 信号灯文件锁linux线程,linux——线程同步(互斥量、条件变量、信号灯、文件锁)...
  7. db2 删除存储过程_蚂蚁金服OceanBase挑战TPCC | TPCC基准测试之存储优化
  8. 个人帐目管理系统java_Java 项目 个人帐目管理系统
  9. java datetime long_Android Java datetime值从String到Long到String问题
  10. ios 从前台返回到回台 从后台返回到前台 或者 支付宝支付订单后 对界面进行操作...
  11. detectron2 demo cuda10.0 py3.6
  12. 如果实现了一种不用暂停世界的GC算法,会对现在编程语言产生什么影响?
  13. 前端工程化和Reactjs的模式
  14. 7-8-无向图的关节点-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版
  15. 东线报接口 全网一手线报全网(京东,淘宝,天猫)最全优惠信息
  16. C1认证学习笔记(第一章)
  17. 解决Please define the NDK_PROJECT_PATH variable to point to it.
  18. 分布式mysql cobar_Mysql分布式中间件:Cobar server
  19. Asterisk内核 拾遗
  20. 理解JPEG图像压缩算法,DCT变换

热门文章

  1. 软件测试的几大误区(带你踩坑)
  2. spider和python的关系_Scrapy框架-Spider和CrawlSpider的区别
  3. Ecilpse常用快捷键总结
  4. 如何快速上手一个项目
  5. Shell脚本基本用法
  6. (三)Linux 安装
  7. abovedisplayskip无效_初学latex的模板,里面有错,哪位大神能不能帮忙看看啊?不甚感激!...
  8. 解决mendeley不能输入中文的情况
  9. MATLAB中的光照处理
  10. 自动划分-------训练集+验证集+测试集(code,自己设置比例)