传送门

文章目录

  • 目录
    • 题意:
    • 思路:

目录

题意:

给你nnn个数,从中任意选出一组数,使这些数能分成和相等的两组,问有多少种选数方案。

2≤n≤20,1≤ai≤1e92\le n\le 20,1\le a_i\le 1e92≤n≤20,1≤ai​≤1e9

思路:

注意审题,是选出一组能分成两组和相等的即可,也就是说如果是同一组但是分成两个部分的时候有多种方案,那么也算一种。

看到nnn很小,不难想到爆搜,但是每个数有三种情况,复杂度3n3^n3n,但是我们可以使用meetinmiddlemeet\ \ in\ \ middlemeet  in  middle先搜一半,让后对于另一半直接使用其搜出来的信息,由于对于每一个选出来数相同的方案都视为一个方案,所以对于每个状态我们需要记一个state代表当前选了哪几个,让后去重即可。

考虑如何计算方案?假设当前两边差值的绝对值是xxx,那么需要另一半两边插值绝对值也为xxx,是否只需要加入另一半插值也为xxx的方案即可?答案是否定的,还需要判断当前这一半状态与另一半状态拼起来是否已经计算过,所以需要存下来遍历,这样复杂度有点高,但是吸氧能过。。

#include<bits/stdc++.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=1000010,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;
typedef pair<LL,LL> PII;int n;
int a[N];
map<LL,vector<int>>mp;
map<pair<LL,LL>,int>st,vis;void dfs(int u,LL l,LL r,LL state) {if(u>=n/2) {LL now=abs(r-l);if(st.count({state,now})) return;st[{state,now}]=1;mp[now].pb(state);//cout<<now<<"**"<<l<<' '<<r<<endl;return;}dfs(u+1,l,r,state);dfs(u+1,l+a[u],r,state+(1<<u));dfs(u+1,l,r+a[u],state+(1<<u));
}LL ans=0;
void solve(int u,LL l,LL r,LL state) {if(u==n) {LL now=abs(l-r);if(st.count({state,now})) return;st[{state,now}]=1;//ans+=mp[now];for(auto x:mp[now]) {if(vis.count({x,state})) continue;vis[{x,state}]=1;ans++;}return;}solve(u+1,l,r,state);solve(u+1,l+a[u],r,state+(1<<u));solve(u+1,l,r+a[u],state+(1<<u));
}void solve() {scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&a[i]);if(n==1) {puts("0");return;}dfs(0,0,0,0);st.clear(); vis[{0,0}]=1;//for(auto x:mp) cout<<x.X<<' '<<x.Y<<endl;solve(n/2,0,0,0);printf("%lld\n",(ans));
}int main() {int _=1;while(_--) {solve();}return 0;
}

P3067 [USACO12OPEN]Balanced Cow Subsets G 折半搜索相关推荐

  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 [Usaco2012 Open]Balanced Cow Subsets

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2679 题解 meet in the middle,枚举左边放在第一个集合,第二个集合还是 ...

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

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

  4. 【LOJ6072】苹果树【折半搜索】【矩阵树定理】【二项式反演】

    题意:有好坏两种点共 nnn 个,每个好点有权值,把这 nnn 个点连成一棵树,一个好点为有用的当且仅当它至少与一个好点相邻,求所有有用的点的权值和不超过 limlimlim 的方案数. n≤40n\ ...

  5. [折半搜索][has] Jzoj P4250 路径

    Description A国有n个城市,编号为1到n,任意两个城市之间有一条路.shlw闲得没事干想周游A国,及从城市1出发,经过且仅经过除城市1外的每个城市1次(城市1两次),最后回到城市1.由于s ...

  6. 【折半搜索-经典题目】中山纪念中学暑期游Day13——【GDOI2017模拟8.15】Buy

    前言 考试时有道题目用到了[折半搜索] 老师推荐了这道经典题目让大家练习[前后部分算法不同]的题目 虽然不知道我有没有时间做,好歹先把题目记录一下,免得以后找不到了qwq 题目 Input Outpu ...

  7. Codeforces Round #297 (Div. 2)E. Anya and Cubes 折半搜索

    Codeforces Round #297 (Div. 2)E. Anya and Cubes Time Limit: 2 Sec  Memory Limit: 512 MB Submit: xxx  ...

  8. [luogu4799 CEOI2015 Day2] 世界冰球锦标赛(折半搜索)

    传送门 Solution 折半搜索裸题,注意\(long long\) Code #include <cmath> #include <cstdio> #include < ...

  9. Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索

    传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...

最新文章

  1. UIProgressView的使用
  2. i春秋DMZ大型靶场实验(四)Hash基础
  3. 李国浩20179307第二周作业
  4. 请用JavaScript实现一个函数,接受一-个IP白名单列表whitelist以及列表ipList
  5. ub c语言,操作系统之LRU算法 C语言链表实现
  6. 英语笔记:词组句子:0806
  7. 发达国家餐厅的一张罚单 让我们中国人汗颜
  8. java datetime long_Android Java datetime值从String到Long到String问题
  9. 10许可证即将到期_食品经营许可证延续
  10. mysql int 转 varchar_Java后端程序员必备:MySQL索引失效的十大杂症
  11. 【转】Unix的文件系统的内部结构,主要是超级块、inode相关知识
  12. hdu 1284 dp
  13. Vue+flvjs 实现视频播放
  14. mate2 刷机 android8,华为Mate2官方原版固件rom刷机包_华为Mate2系统强刷升级包
  15. 远程连接服务器的命令工具,windows系统如何实现远程命令?远程命令工具您选哪个?...
  16. 全面保护个人电脑中的宝贵数据和文件(转)
  17. 家用电脑设置成小程序服务器,电脑微信小程序设置全屏的方法是什么
  18. 35、ubuntu20.04搭建瑞芯微的npu仿真环境和测试rv1126的Debain系统下的yolov5+npu检测功能以及RKNN推理部署以及RTSP视频流解码
  19. 基于单片机的红外遥控密码锁系统设计(#0407)
  20. 安卓角色扮演游戏源码_角色扮演类安卓手游排行榜 热门手游推荐

热门文章

  1. java jdk实现快速排序_Java实现快速排序过程分析
  2. 《随机过程》布朗运动理论中的两个反常问题
  3. 每日一笑 | 坐牢吗?学编程那种~
  4. 每日一笑 | 你知道程序媛最“大”的烦恼是什么吗?
  5. 讲100个科学道理,不如做这些有趣的理科实验!
  6. 备战美赛,这些你应该知道的知识点
  7. jpa 默认生成sql语句_springboot-jpa自动创建数据库表
  8. php-fpm 超时,PHP超时的坑
  9. 浙江省2021年英语高考成绩查询,浙江高考成绩查询、志愿填报时间公布!
  10. 10kv电压互感器型号_电压互感器型号大全