当前位置: 首页 > news >正文

【2024.10.22练习】机器人塔

题目描述


题目分析

由于数据小,直接考虑DFS搜索底层所有排列组合。


我的代码

需要注意:这个数据有点漏洞的是题干声明N+M<231,但实际上有个测试点是等于231的。

一开始在build_tower()函数中建完整个塔再判定是否合格,结果最大数据量下超时了。后面修改了函数,每添加一个机器人就判定一次是否合格,不合格直接退出函数,这样运行时间就在有效时长内了。因此对于时间复杂度在极限附近的程序,剪枝也是很有效的。

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX_L=22;
int m; //A数量 
int n; //B数量
int l; //层数:也是最底层的机器人数 
bool bottom[MAX_L];//最底层机器人排列 
bool tower[MAX_L][MAX_L]; 
//tower[i][j]表示第i层从左往右第j个机器人种类 
int ans;
void build_tower(){//记录用于构筑的A,B数量int A=m;int B=n; //构建底层 for(int i=1;i<=l;i++){tower[l][i]=bottom[i]; if(!bottom[i]) A--;if(bottom[i]) B--;}//构建上层for(int i=l-1;i>0;i--){for(int j=1;j<=i;j++){tower[i][j]=tower[i+1][j]^tower[i+1][j+1]; //异或运算 if(!tower[i][j]) A--;if(tower[i][j]) B--;if(A<0||B<0) return;}}if(A==0&&B==0){ans++;//数量正确 }
}
void dfs(int a,int b,int x){//a,b为剩余A,B的数量 if(a<0||b<0||x>l) return;if(x==l){build_tower();return;}bottom[x+1]=0; dfs(a-1,b,x+1); //0代表Abottom[x+1]=1;dfs(a,b-1,x+1); //1代表B
}
int main()
{cin>>m>>n;for(int i=1;i<=21;i++){if(i*(i+1)/2==m+n){l=i;}}ans=0;dfs(m,n,0);cout<<ans;return 0;
}
http://www.lryc.cn/news/466838.html

相关文章:

  • 酒店预订订房小程序源码系统 多酒店入驻+打造类似美团的酒店模式 带完整的安装代码包以及搭建部署教程
  • springboot037基于SpringBoot的墙绘产品展示交易平台的设计与实现(论文+源码)_kaic
  • YOLOv8实战人脸-口罩检测与识别【数据集+YOLOv8模型+源码+PyQt5界面】
  • 《黑神话悟空》各章节boss顺序汇总
  • rust中cargo.toml详细介绍
  • jupyter notebook 笔记
  • Atlas800昇腾服务器(型号:3000)—CANN安装(二)
  • 考研鼓励小程序
  • Wooden UI(木头UI纹理按钮边框 背景图标 带PNG素材)
  • WebRTC音频 03 - 实时通信框架
  • Maven陷阱揭秘:避开Java项目构建的10大常见误区
  • 基础数据结构思路写法记录,便于回顾
  • 基于AI的量化投资框架Qlib的Python依赖包pyqlib安装问题记录
  • 《语音识别方案选择》
  • 目标检测数据集图片及标签同步裁剪
  • 【设计模式-简单工厂】
  • 多个版本的GCC(GNU编译器集合)可以同时安装并存
  • 量子纠错--shor‘s 码
  • 机器学习2
  • 二分查找_ x 的平方根搜索插入位置山脉数组的峰顶索引
  • 汽车建模用什么软件最好?汽车建模渲染建议!
  • 蘑菇分类识别数据集(猫脸码客 第222期)
  • 长短期记忆网络(Long Short-Term Memory,LSTM)
  • WHAT - 引入第三方组件或项目使用需要注意什么
  • 原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
  • WindTerm配置快捷键Ctrl+C和Ctrl+V
  • AOP学习
  • 【ubuntu18.04】ubuntu18.04升级cmake-3.29.8及还原系统自带cmake操作说明
  • 利用Docker搭建一套Mycat2+MySQL8一主一从、读写分离的最简单集群(保姆教程)
  • 算法——python实现堆排序