「题解」:毛一琛/$cow$ $subsets$
问题 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 ;
}
随机推荐
- google cloud
1.win10下安装gcloud SDK 必须设置环境变量CLOUDSDK_PYTHON指向执行文件而不是目录.
- nodejs 静态资源文件与登陆交互
server2.js var express=require('express'); var expressStatic=require('express-static'); var server=e ...
- hive之基本架构
什么是Hive hive是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员是用他们最为熟悉的SQL语言就可以进行海量的数据的处理.分析和统计工作,而不是必须掌握JAVA等变成语言和具备开 ...
- 详解 MySQL int 类型的长度值问题
以下是每个整数类型的存储和范围 (来自 mysql 手册)
- c++之初始化列表
#include<iostream> using namespace std; class Person{ public: int m_a; int m_b; int m_c; Perso ...
- vue 绑定 class 和 内联样式(style)
<div id="app31"> <!--多个属性 ,号隔开--> <!-- v-bind:style="{fontSize: fontSi ...
- mysql恢复root密码
1.停止MySQL服务: // mysqld stopnet stop mysql 2.跳过权限检查启动MySQL(此时不要关闭CMD窗口): // mysqld -nt –skip-grant- ...
- (转)Linux环境进程间通信----系统 V 消息队列列
转:http://www.ibm.com/developerworks/cn/linux/l-ipc/part3/ 消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点.作为早期unix通 ...
- WPF 3D
参考MSDN内容:http://msdn.microsoft.com/zh-cn/library/ms747437(v=vs.110).aspx 概述 WPF使用Viewport3D元素,将三维场景显 ...
- Lung Nodule Detection------work log
有时候真的不知道自己是怎么走上,模式识别,人工智能的这条路上的.但既然走上了这条路,我就没有理由荒废我所学到的东西.在学校里面研究了很长的时间的肺结节检测,但那都是只限于研究和写论文,现在我想把大家的 ...