尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

018.递归分治

018.递归分治
📅 发布时间:2026/6/23 9:28:57

分而治之

分治是一种思想

将大问题分解成子问题

比较经典的分治:归并排序,二叉树后序位置的一系列操作

归并排序:

const int MAXN=91;
int nums[MAXN],n,temp[MAXN];
void mergesort(int l,int r)
{if(l>=r)return ;int mid=(l+r)>>1;mergesort(l,mid);mergesort(mid+1,r);int i=l,j=mid+1,k=l;while(i<=mid&&j<=r){if(nums[i]>nums[j])temp[k++]=nums[j++];else temp[k++]=nums[i++];}while(i<=mid)temp[k++]=nums[i++];while(j<=r)temp[k++]=nums[j++];for(int i=l;i<=r;i++)nums[i]=temp[i];
}

题

luogu P1498

第一眼 : 画图,n <= 10 ? 那就打表!

好吧 1024*2048 指数级增长还是算了

正解:递归分治

char m[1025][2050];
void dfs(int x,int y,int n){if(n==1){m[x][y]=m[x+1][y-1]='/';m[x][y+1]=m[x+1][y+2]='\\';m[x+1][y]=m[x+1][y+1]='_';return;}n--;int z=1<<n;dfs(x,y,n);dfs(x+z,y-z,n);dfs(x+z,y+z,n);
}
void solve(){int n;read(n);int d=1<<n,w=d<<1;for(int i=1;i<=d;i++){for(int j=1;j<=w;j++){m[i][j]=' ';}}dfs(1,d,n);for(int i=1;i<=d;i++){for(int j=1;j<=w;j++){wr(m[i][j]);}wr('\n');}
}

luogu P5461

比较简单

bool m[1<<10][1<<10];
void f(int n,int x,int y){if(n==1)return;int h=n>>1;for(int i=x;i<x+h;++i)for(int j=y;j<y+h;++j)m[i][j]=0;f(h,x+h,y);f(h,x,y+h);f(h,x+h,y+h);
}
void solve(){int n;read(n);int N=1<<n;for(int i=0;i<N;++i)for(int j=0;j<N;++j)m[i][j]=1;f(N,0,0);for(int i=0;i<N;++i){for(int j=0;j<N;++j){wr(m[i][j],' ');}wr('\n');    }        
}

luogu P1228

二的次幂,容易想到分治

事实如此,将整张图分成左上,坐下,右上,右下四块

递归处理每1/4块图

直到最小2*2

根据特殊点(x,y)与当前块的左上角的相对位置分块递归

放在整张图就是公主位置(x,y)与左上角(1,1)比较

不要陷入函数细节,否则就是顶级折磨 '-'

void dfs(int x,int y,int xx,int yy,int h){if(h==1)return;h>>=1;if(x-xx<h&&y-yy<h){wr(xx+h,yy+h,"1\n");dfs(x,y,xx,yy,h);dfs(xx+h-1,yy+h,xx,yy+h,h);dfs(xx+h,yy+h-1,xx+h,yy,h);dfs(xx+h,yy+h,xx+h,yy+h,h);}if(x-xx<h&&y-yy>=h){wr(xx+h,yy+h-1,"2\n");dfs(x,y,xx,yy+h,h);dfs(xx+h-1,yy+h-1,xx,yy,h);dfs(xx+h,yy+h-1,xx+h,yy,h);dfs(xx+h,yy+h,xx+h,yy+h,h);}if(x-xx>=h&&y-yy<h){wr(xx+h-1,yy+h,"3\n");dfs(x,y,xx+h,yy,h);dfs(xx+h-1,yy+h-1,xx,yy,h);dfs(xx+h-1,yy+h,xx,yy+h,h);dfs(xx+h,yy+h,xx+h,yy+h,h);}if(x-xx>=h&&y-yy>=h){wr(xx+h-1,yy+h-1,"4\n");dfs(x,y,xx+h,yy+h,h);dfs(xx+h-1,yy+h-1,xx,yy,h);dfs(xx+h-1,yy+h,xx,yy+h,h);dfs(xx+h,yy+h-1,xx+h,yy,h);}   
}
void solve(){int k,x,y;read(k,x,y);dfs(x,y,1,1,1<<k);
}

相关新闻

  • 【FreeRTOS实战】互斥锁专题
  • Excalidraw文档编写规范:Markdown语法与示例
  • Excalidraw图片懒加载优化:减少初始请求量

最新新闻

  • Django毕设项目:基于Django 面向公益环保场景的众筹管理平台设计与实现数字化环保公益众筹平台的设计与搭建 —— 基于 Django (源码+文档,讲解、调试运行,定制等)
  • 2026国内文武学校育人模式观察:从一招一式到全面发展 - 品研笔录
  • 如何从一名小白成为网安大神(第二十四天)
  • 通义灵码Quest模式:AI结对编程的端到端任务闭环实践
  • 一文看懂fofa常用语法,告别混淆,精准打击!免责声明
  • 安卓300万行老工程AI知识库:三层索引+可迭代语义图谱

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号