问题 A: 毛一琛/$cow$ $subsets$

时间限制: 1 Sec  内存限制: 512 MB

题面


题面谢绝公开。

题解


题名貌似是个大神??看起来像是签到题然后就死了。

首先$O(3^n)$算法显然。也显然过不去$20$的测试点。

正解是赫赫有名的$meet$ $in$ $the$ $middle$算法。数据在40以内的都能用$meet$ $in$ $the$ $middle$??

对于两半路径,可以拼起来并且构成合法答案的条件是两人获得的分数相同。

所以一个比较聪明的办法是,不去记录两个人各自得到了多少分,而是记录两个人得分的差。

至于谁减谁无所谓,相同的话把其中一个翻转就好了。不搞相反也可以避免重复。

于是我们开一个$map$,对于每一个在前一半路径得到的差值映射一个编号。并以之为下标存储前一半扫过的状态,方便拼接。

对于后一半路径扫过的差值,在$map$里查询,有就拼上,状态置1。

代码:

#include<bits/stdc++.h>
#define rint register int
using namespace std;
int n,a[],tot,ans;
bool vis[(<<)+];
map <int,int> m;
vector <int> v[];
inline void dfs1(rint k,rint res,rint con)
{
if(k==n/+)
{
if(m.find(res)==m.end())m[res]=++tot;
int lin=m[res];v[lin].push_back(con);
return ;
}
dfs1(k+,res,con);
dfs1(k+,res+a[k],con|(<<k-));
dfs1(k+,res-a[k],con|(<<k-));
return ;
}
inline void dfs2(rint k,rint res,rint con)
{
if(k==n+)
{
if(m.find(res)!=m.end())
{
int lin=m[res];
for(rint i=;i<v[lin].size();++i)
vis[v[lin][i]|con]=;
}
return ;
}
dfs2(k+,res,con);
dfs2(k+,res-a[k],con|(<<k-));
dfs2(k+,res+a[k],con|(<<k-));
return ;
}
int main()
{
scanf("%d",&n);
for(rint i=;i<=n;++i)scanf("%d",&a[i]);
dfs1(,,);dfs2(n/+,,);
for(rint i=;i<=(<<n)-;++i)ans+=vis[i];
printf("%d\n",ans);
return ;
}

随机推荐

  1. react todelist

    1.点击按钮提交,新增对象 buttonChange() { this.setState({ //展开运算符...this.state.list,生成一个全新的数组 // list:[...this. ...

  2. 查看github热门项目

    访问 Trending 或者可以通过菜单 Explore -> 选择 "Trending" -- 默认是查看今天在github社区活跃的仓库 在 github 搜索框输入 s ...

  3. 4、Python 基础类型 -- Tuple 元祖类型

    Python 元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 如下实例: 实例(P ...

  4. ftp的虚拟用户的使用

    虚拟用户原理 因为在linux之下,使用vsftp建立用户之后,默认使用ftp访问的时候,是会访问到对应的用户家目录.如果想多个用户同时访问某一个目录,同时对同一目录下有着不同的权限,比如部分用户只能 ...

  5. 生产者消费者模式-->线程

    #_author:来童星#date:2019/12/17#生产者消费者模式-->线程from queue import Queueimport random,time,threading#生产者 ...

  6. snaker配置

    1,导入jar包 jar包 2,snaker的配置 3,snaker的工具类 以上是使用snaker的最基本的配置. http://lightfor.org/snaker/demo.html

  7. centos 下安装 shpinx2.1.7 记录

    安装sphinx yum install -y mysql mysql-devel yum install automake autoconf cd /usr/local/src/ wget http ...

  8. (转)rand函数和srand函数

    转:http://www.cnblogs.com/lenient/articles/1565376.html 首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand ...

  9. hibernate基本配置优化

    前面已经说过hibernate的基本配置了,现在对之前的基本配置进行代码优化: 写一个读取配置工具 package tool; import org.hibernate.Session; import ...

  10. Nginx学习——proxy_pass

    参考官网:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 定义:用来设置被代理服务器的协议(http或https ...