蓝桥杯第七届决赛(国赛)C++B组 第四题 机器人塔
机器人塔
X星球的机器人表演拉拉队有两种服装,A和B。
他们这次表演的是搭机器人塔。
类似:
A
B B
A B A
A A B B
B B B A B
A B A B B A
队内的组塔规则是:
A 只能站在 AA 或 BB 的肩上。
B 只能站在 AB 或 BA 的肩上。
你的任务是帮助拉拉队计算一下,在给定A与B的人数时,可以组成多少种花样的塔。
输入一行两个整数 M 和 N,空格分开(0<M,N<500),分别表示A、B的人数,保证人数合理性。
要求输出一个整数,表示可以产生的花样种数。
例如:
用户输入:
1 2
程序应该输出:
3
再例如:
用户输入:
3 3
程序应该输出:
4
资源约定:
峰值内存消耗 < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。
提交时,注意选择所期望的编译器类型。
这道题确实有点恶心,开始想了好多办法都错了。。。。比如列举底层全排列,显然有重有漏。底层dp基本没结果。
不过可以确定,不论是从底层开始该排列唯一。从顶层开始则为DFS,这里不进行证明!
说一下思路,顶层开始每一个位置都是 A或者B,尝试AB推导法则:
仔细观察,每层第i个和上层第i个有异或运算A^B=B ,A^A=A,B^B=A,B^A=B。 好了,本题基本结束。
map[line][i]=map[line][i-1]^map[line-1][i-1];
解题时间(2.5hour)
//代码思路
//0表A,1表B,存在二维数组map中,进行DFS
//每一行的上层确定并且每行第一个数字确定,该行唯一
//所以本题就是DFS每行第一个
//题意,A和B的总数cnt<999,设一共可以摆n行,等差数列求和 cnt=n*n(n+1)/2
//得到n最大为44
不懂再问,下面给出代码:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<set>
#include<stdio.h>
#define ll long long
using namespace std;
int ans;
int map[50][50];
void DFS(int line,int re_A,int re_B,int n) //line 当前行 re_A 可用的A re_B 可用的B n代表层数
{
int A=re_A;
int B=re_B; if(re_A<0||re_B<0)
return;
if(line == n&&A==0&&B==0)
{
ans++;
return;
}
re_A=A;
re_B=B;
map[line][0]=0;
re_A-=1;
for(int i=1;i<=line;i++)
{
map[line][i]=map[line][i-1]^map[line-1][i-1];
if(map[line][i]==0){ re_A--;
}
else{ re_B--;
}
}
DFS(line+1,re_A,re_B,n); re_A=A;
re_B=B;
map[line][0]=1; re_B-=1;
for(int i=1;i<=line;i++)
{
map[line][i]=map[line][i-1]^map[line-1][i-1];
if(map[line][i]==0)
re_A--;
else
re_B--;
}
DFS(line+1,re_A,re_B,n); }
int main()
{
int x,y,n;
while(cin>>x>>y)
{
ans=0;
for(int i=1;;i++)
{
if(2*x+2*y==i*i+i)
{
n=i;
break;
}
}
DFS(0,x,y,n); cout<<ans<<endl; }
}
蓝桥杯第七届决赛(国赛)C++B组 第四题 机器人塔的更多相关文章
- 算法笔记_122:蓝桥杯第七届省赛(Java语言A组)试题解答
目录 1 煤球数目 2 生日蜡烛 3 搭积木 4 分小组 5 抽签 6 寒假作业 7 剪邮票 8 取球博弈 9 交换瓶子 10 压缩变换 前言:以下试题解答代码部分仅供参考,若有不当之处,还请路 ...
- 蓝桥杯第七届C/C++B省赛凑算式
第三题: 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字, ...
- 算法笔记_123:蓝桥杯第七届省赛(Java语言B组部分习题)试题解答
目录 1 凑算式 2 方格填数 3 四平方和 1 凑算式 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A ...
- 第八届蓝桥杯国赛java B组第三题
标题:树形显示 对于分类结构可以用树形来形象地表示.比如:文件系统就是典型的例子. 树中的结点具有父子关系.我们在显示的时候,把子项向右缩进(用空格,不是tab),并添加必要的连接线,以使其层次关系更 ...
- 蓝桥杯第十届真题B组(2019年)
2019年第十届蓝桥杯大赛软件类省赛C/C++大学B组# 试题 A:组队# 本题总分:5分[问题描述]作为篮球队教练,你需要从以下名单中选出 1号位至 5号位各一名球员,组成球队的首发阵容.每位球员担 ...
- 山东省第七届ACM省赛------Memory Leak
Memory Leak Time Limit: 2000MS Memory limit: 131072K 题目描述 Memory Leak is a well-known kind of bug in ...
- 山东省第七届ACM省赛------Reversed Words
Reversed Words Time Limit: 2000MS Memory limit: 131072K 题目描述 Some aliens are learning English. They ...
- 山东省第七届ACM省赛------Triple Nim
Triple Nim Time Limit: 2000MS Memory limit: 65536K 题目描述 Alice and Bob are always playing all kinds o ...
- 山东省第七届ACM省赛------The Binding of Isaac
The Binding of Isaac Time Limit: 2000MS Memory limit: 65536K 题目描述 Ok, now I will introduce this game ...
随机推荐
- LeetCode 514----Freedom Trail
问题描述 In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a ...
- android toast使用方法
1.默认展示 // 第一个参数:当前的上下文环境.可用getApplicationContext()或this // 第二个参数:要显示的字符串.也可是R.string中字符串ID // 第三个参数: ...
- Android SD卡上文件
1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...
- centos虚拟机网卡配置
连接模式为NAT
- maven(12),排除冲突JAR包
JAR包冲突 <dependencies> <dependency> <groupId>org.springframework</groupId> ...
- MVC实例分析1.1
E_S源码百度云分享链接: http://pan.baidu.com/s/1dFHzEJv 思维导图源文件分享链接: http://pan.baidu.com/s/1hrAXGC8 简单PPT分享链接 ...
- Python学习---Django重点之静态资源配置
[官网静态文件介绍] https://docs.djangoproject.com/en/1.10/howto/static-files/ # settings.py 配置静态资源文件 # STATI ...
- 解决网卡无法自动获取ip的办法
解决网卡无法自动获取IP址的方法 为了省钱或者一户多机,很多人都购买宽带路由器共享上网.在架设路由上网的时候,有些“师傅”可能不懂或是偷懒,开启了宽带路由器的DHCP( Dynami ...
- January 06 2017 Week 1st Friday
Victory won't come to me unless I go to it. 胜利是不会向我走来的,我必须自己走向胜利. I wish I can walk from one victory ...
- T-SQL批处理
批处理简介 批处理是作为一个逻辑单元的T-SQL语句.如果一条语句不能通过语法分析,那么不会运行任何语句.如果一条语句在运行时失败,那么产生错误的语句之前的语句都已经运行了. 为了将一个脚本分为多个批 ...