传送门

BZOJ传送门(权限题)

看到n小于20,就可以想到搜索

所有的数要么在集合a中,要么在集合b中,要么都不在

可是3^n复杂度会炸,我们考虑优化

可以利用折半搜索,将前面一半的所有可能情况与后一半列举

排序扫描统计答案

由于选择情况可能会重复,我们还要记录一下状态,然后在统计时判断一下

统计时会将一个都不选的情况计算进去,所以ans要-1

# include<iostream>
# include<cstdio>
# include<cmath>
# include<algorithm>
# include<cstring>
using std::sort;
const int mn = ;
int a[mn];
int n;
struct node{int val,cur;};
node L[<<mn],R[<<mn];
int vis[<<mn];
int LeftCnt,RightCnt;
void dfs(int x,int en,int nowval,int nowstate)
{
if(x>en)
{
if(en==n/) L[++LeftCnt].val=nowval,L[LeftCnt].cur=nowstate;
else R[++RightCnt].val=nowval,R[RightCnt].cur=nowstate;
return ;
}
dfs(x+,en,nowval,nowstate);
dfs(x+,en,nowval-a[x],nowstate+(<<(x-)));
dfs(x+,en,nowval+a[x],nowstate+(<<(x-)));
}
bool cmp1(node x,node y){return x.val<y.val;}
bool cmp2(node x,node y){return x.val>y.val;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
dfs(,n/,,);
dfs(n/+,n,,);
sort(L+,L++LeftCnt,cmp1);
sort(R+,R++RightCnt,cmp2);
int l=,r=,ans=;
while(l<=LeftCnt && r<=RightCnt)
{
while(L[l].val+R[r].val> && r<=RightCnt) r++;
int pre=r;
while(L[l].val+R[r].val== && r<=RightCnt)
{
if(vis[L[l].cur | R[r].cur]==)
vis[L[l].cur | R[r].cur]=,ans++;
r++;
}
if(L[l].val==L[l+].val) r=pre;
l++;
}
printf("%d",ans-);
return ;
}

最新文章

  1. 通过对表格数据的选择对input的value进行修改
  2. CNI插件源码示例,对于github.com/rajatchopra/ocicni库的分析
  3. telnet 使用
  4. ZOJ 3911 线段树
  5. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
  6. SharePoint Iframe 报错“此内容不能显示在一个框架中”&lt;续&gt;
  7. 实验室 Linux 集群的管理常用命令
  8. Openfire 代码部署报错: Variable references non-existent resource:${workspace_loc:openfire_src}
  9. android应用程序监听SMS Intent广播
  10. FireMonkey vs. VCL (FMX的UI更灵活,图形效果更强,硬件加速,内嵌3D,使用浮点数更精确,跨平台,可使用Mida converter转换和TFireMonkeyContainer内嵌)
  11. 关于Centos Linux系统安装Python的问题
  12. (九十)使用多个storyboard+代码实现控制器的分开管理
  13. 待解决ava.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method)
  14. dig常用命令
  15. mvc中使用Pagination,对其进行再封装
  16. .net分布式系统架构的思路
  17. Django项目部署在Linux下以进程方式启动
  18. 在C#中使用.NET SDK创建控制
  19. Eclipse使用hibernate插件
  20. dendrogram 和 barplot 的组合

热门文章

  1. tensorflow中张量的理解
  2. 扫描线矩形周长的并 POJ1177
  3. 9.2专项测试-Android性能测试黑盒分析-1
  4. MySQL系列(六)--索引优化
  5. [转] Blob对象
  6. Hdu 1402 (FFT)
  7. 关于 LVM
  8. Exception in thread &quot;AWT-EventQueue-0&quot; javax.persistence.PersistenceException: No Persistence provider for EntityManager named null
  9. JAVA获取磁盘空间
  10. Vue表单验证插件的制作过程