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

机器人塔--dfs+枚举

1.仔细考虑,你会发现如果固定了最后一层,那么上面就一目了然了,那么我们就dfs全排列枚举

2.再一看n+m<231,那么最多21的全排列,不多

3.排列后就要从下而上check,用异或来实现,A表false,B表true

4.a,b根据推出来的减,<0return false,直到顶层i==1结束i=0

P8644 [蓝桥杯 2016 国 B] 机器人塔 - 洛谷

#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef  long long ll;
typedef pair<int,int> pii;
bool aa[300];
int n,m,x;
ll an;
bool check(bool aa[],int a,int b)
{int i=x;bool bb[250];///一定要重新建一个数组 for(int i=1;i<=x;i++) bb[i]=aa[i]; while(i)///从上到下 {for(int j=1;j<i;j++){bb[j]=bb[j]^bb[j+1];if(bb[j]) b--;if(!bb[j]) a--;if(a<0) return false;if(b<0) return false;}i--;}return true;}
void dfs(int i,int a,int b)///全排列 
{if(a<0||b<0) return;if(i==x+1){if(check(aa,a,b)){an++;}return;}aa[i]=true;dfs(i+1,a,b-1);aa[i]=false;dfs(i+1,a-1,b);}
int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=sqrt(2*(n+m));;i--){if(i*(i+1)==2*(n+m)){x=i;break;}}dfs(1,n,m);cout<<an;return 0;}

http://www.lqws.cn/news/193087.html

相关文章:

  • 制作电子相册
  • 【三余升序数对个数】2022-4-17
  • 软件测评服务如何依据标准确保品质?涵盖哪些常见内容?
  • 如何编写自动化测试用例?
  • 简单了解一下Hugging Face(抱抱脸)
  • itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程
  • 猜字符位置游戏-position gasses
  • ES数据聚合
  • 视觉SLAM基础补盲
  • 【NLP中向量化方式】序号化,亚编码,词袋法等
  • Python打卡训练营学习记录Day46
  • 第7篇:中间件全链路监控与 SQL 性能分析实践
  • 微软推出SQL Server 2025技术预览版,深化人工智能应用集成
  • VBA清空数据
  • Python训练营---Day46
  • [大A量化专栏] QMT常见问题QA
  • 5G网络中频段的分配
  • DAY45 可视化
  • 每日算法 -【Swift 算法】电话号码字母组合
  • gvim比较两个文件不同并合并差异
  • 和芯 SL6341 (内置FLASH) 国产USB 3.0HUB芯片 替代 GL3510 VL817
  • Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
  • Langgraph实战--在Agent中加入人工反馈
  • 13.MySQL用户管理
  • 力扣100-移动0
  • Android Test3 获取的ANDROID_ID值不同
  • ​​TPS3808​​低静态电流、可编程延迟电压监控电路,应用笔记
  • 初识AI Agent
  • Rust 开发环境搭建
  • 精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化