首页 > 其他分享 >Meet in the middle

Meet in the middle

时间:2023-10-12 21:35:29浏览次数:31  
标签:int ll long middle dfs1 ans Meet now

meet in the middle in oiwiki

meet in the middle,也可以叫折半搜索,是一种用来优化爆搜的方式。

适用于一些数据范围比较小可以爆搜——但还没有小到可以直接搜的程度。可以让复杂度从 \(O(a^b)\) 降到 \(O(a^{b/2})\)

适用的题目一般与异或有关(才能拆成两半搜)。


P2962 [USACO09NOV] Lights G

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=40;
int n,m;
int ansn=0x3f3f3f3f;
ll all,vis[N];
map<ll,int> ans;
void dfs(int l,int r,int now,int tot){
	if(ans[now]) ans[now]=min(ans[now],tot);
	else ans[now]=tot;
	if(ans[now^all]||now==all) ansn=min(ansn,ans[now^all]+tot);
	if(l>r) return;
	dfs(l+1,r,now,tot);
	dfs(l+1,r,now^vis[l],tot+1);
}
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		int x,y;
		scanf("%d%d",&x,&y);
		vis[x]^=1<<y;
		vis[y]^=1<<x; 
	}
	for(int i=1;i<=n;i++){
		all^=1<<i;
		vis[i]^=1<<i;
	}
	dfs(1,n/2,0,0);
	dfs(n/2+1,n,0,0);
	printf("%d",ansn);
}

[ABC271F] XOR on Grid Path

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=22;
int n;
ll ans;
ll a[N][N];
map<ll,int> cnt[N][N];
void dfs1(int x,int y,ll now){
	now^=a[x][y];
	if(x+y==n+1){
		cnt[x][y][now]++;
		return;
	}
	dfs1(x+1,y,now);
	dfs1(x,y+1,now);
}
void dfs2(int x,int y,ll now){
	if(x+y==n+1){
		ans+=cnt[x][y][now];
		return;
	}
	now^=a[x][y];
	dfs2(x-1,y,now);
	dfs2(x,y-1,now);
} 
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]);
	dfs1(1,1,0);
	dfs2(n,n,0);
	printf("%lld",ans);
	return 0;
}

CF1006F

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=25;
int n,m;
ll k,cnt;
ll a[N][N];
map<ll,int> ans[N][N];
void dfs1(int x,int y,ll now){
	now^=a[x][y];
	if(x+y==(n+m)/2+1){
		ans[x][y][now]++;
		return; 
	}
	dfs1(x,y+1,now);
	dfs1(x+1,y,now);
}
void dfs2(int x,int y,ll now){
	if(x<0||y<0) return;
	if(x+y==(n+m)/2+1){
		cnt+=ans[x][y][k^now];
		return;
	}
	now^=a[x][y];
	dfs2(x-1,y,now);
	dfs2(x,y-1,now);
}
int main(){
	scanf("%d%d%lld",&n,&m,&k);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) scanf("%lld",&a[i][j]);
	dfs1(1,1,0);
	dfs2(n,m,0);
	printf("%lld",cnt);
	return 0;
} 

标签:int,ll,long,middle,dfs1,ans,Meet,now
From: https://www.cnblogs.com/Moyyer-suiy/p/17760606.html

相关文章

  • 线下Meetup:在数智化转型背景下,火山引擎VeDI的大数据技术揭秘
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,联合火山引擎开发者社区,火山引擎数智平台(VeDI)《数智化转型背景下的火山引擎大数据技术揭秘》主题Meetup暨超话数据特别场正式在深圳举办,邀请到了Datasail、DataLeap、ByteHouse、E......
  • 线下Meetup:在数智化转型背景下,火山引擎VeDI的大数据技术揭秘
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群近日,联合火山引擎开发者社区,火山引擎数智平台(VeDI)《数智化转型背景下的火山引擎大数据技术揭秘》主题Meetup暨超话数据特别场正式在深圳举办,邀请到了Datasail、DataLeap、ByteHouse、EMR、LAS等......
  • 活动回顾 | 暴雨也无法阻挡的奔赴,2023 Meet TVM · 深圳站完美收官!
    2023MeetTVM·深圳站于2023年9月16日在腾讯大厦成功举办,百余名参与者亲临现场,聆听讲师们的精彩分享。作者|xixi编辑|三羊<br>本文首发于HyperAI超神经微信公众平台~<br>**由MLC.AI社区和HyperAI超神经主办,Openbayes贝式计算和腾讯AILab协办的2023Mee......
  • WorkPlus Meet本地化部署视频会议软件,助力企业实现安全高效的远程会议
    在全球化的时代,企业跨地域的合作与沟通日益频繁。本地化部署视频会议软件成为了企业提升沟通效率的重要手段。WorkPlusMeet作为领先厂家,提供本地化部署的视频会议软件,为企业打造高效的沟通环境。本文将详细介绍WorkPlusMeet本地化部署视频会议软件的优势以及助力企业实现高效安全......
  • WorkPlus Meet安全高效的内网视频会议软件,打造无障碍沟通新体验
    随着全球化办公环境的快速发展,企业内部协作和沟通形式亦发生了革命性转变。传统面对面会议已无法满足跨地域、跨时区的协作需求。此时,内网开启的视频会议软件成为企业的必备工具。作为领先品牌,WorkPlusMeet致力于提供安全高效的内网视频会议软件,为企业提供无障碍的沟通新体验。内......
  • 活动报名 | Modern Data Stack Meetup 北京首站启动!与三大开源社区共同探索现代数据栈
    相信对于“现代数据堆栈(ModernDataStack)”这个名词,大家早已不陌生。但若问及其真正含义,往往又很难快速、准确地阐明。事实上,对于我们的团队组织而言,吃透并灵活应用“现代数据栈”所能带来的价值与收益,将会是深远且符合发展趋势的。Q1:什么是现代数据堆栈?现代数据堆栈的流行......
  • OpenHarmony Meetup常州站招募令
    OpenHarmonyMeetup常州站正火热招募中!诚邀充满激情的开发者参与线下盛会~探索OpenHarmony前沿科技,畅谈未来前景,感受OpenHarmony生态构建之路的魅力!线下参与,名额有限,仅限20位幸运者!报名截止时间为9月26日24:00点,快快行动起来~参加OpenHarmonyMeetup常州站将有好礼相送:1.......
  • OpenHarmony Meetup常州站招募令
    OpenHarmonyMeetup常州站正火热招募中!诚邀充满激情的开发者参与线下盛会~探索OpenHarmony前沿科技,畅谈未来前景,感受OpenHarmony生态构建之路的魅力!线下参与,名额有限,仅限20位幸运者!报名截止时间为9月26日24:00点,快快行动起来~参加OpenHarmonyMeetup常州站将有好礼相送:1.......
  • 前端项目实战肆佰零玖react-admin和material ui-跨域方案http-proxy-middleware
    const{createProxyMiddleware}=require('http-proxy-middleware');module.exports=(app)=>{app.use(createProxyMiddleware('/postgrest',{target:'http://localhost:4000',changeOri......
  • Meetup 回顾|Data Infra 研究社第十五期(含资料发布)
    本文整理于上周六(9月09日)DataInfra第15期的活动内容。本次活动由Databend研发工程师-韩山杰为大家带来了一场主题为《Databend数据集成方案》的分享,让我们一起回顾一下吧~以下是本次活动的相关文字、视频及资料:通过本次分享,我们能更加的了解Databend的生态工具,在不同数......