洛谷3067 BZOJ 2679题解(折半搜索)
2024-08-28 05:09:54
看到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 ;
}
最新文章
- 通过对表格数据的选择对input的value进行修改
- CNI插件源码示例,对于github.com/rajatchopra/ocicni库的分析
- telnet 使用
- ZOJ 3911 线段树
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
- SharePoint Iframe 报错“此内容不能显示在一个框架中”<;续>;
- 实验室 Linux 集群的管理常用命令
- Openfire 代码部署报错: Variable references non-existent resource:${workspace_loc:openfire_src}
- android应用程序监听SMS Intent广播
- FireMonkey vs. VCL (FMX的UI更灵活,图形效果更强,硬件加速,内嵌3D,使用浮点数更精确,跨平台,可使用Mida converter转换和TFireMonkeyContainer内嵌)
- 关于Centos Linux系统安装Python的问题
- (九十)使用多个storyboard+代码实现控制器的分开管理
- 待解决ava.lang.OutOfMemoryError: PermGen space 	at java.lang.ClassLoader.defineClass1(Native Method)
- dig常用命令
- mvc中使用Pagination,对其进行再封装
- .net分布式系统架构的思路
- Django项目部署在Linux下以进程方式启动
- 在C#中使用.NET SDK创建控制
- Eclipse使用hibernate插件
- dendrogram 和 barplot 的组合
热门文章
- tensorflow中张量的理解
- 扫描线矩形周长的并 POJ1177
- 9.2专项测试-Android性能测试黑盒分析-1
- MySQL系列(六)--索引优化
- [转] Blob对象
- Hdu 1402 (FFT)
- 关于 LVM
- Exception in thread ";AWT-EventQueue-0"; javax.persistence.PersistenceException: No Persistence provider for EntityManager named null
- JAVA获取磁盘空间
- Vue表单验证插件的制作过程