日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[蓝桥杯][2015年第六届真题]机器人塔(DFS)

發布時間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [蓝桥杯][2015年第六届真题]机器人塔(DFS) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述
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的人數,保證人數合理性。

要求輸出一個整數,表示可以產生的花樣種數。
輸入
輸入一行兩個整數 M 和 N,空格分開(0<M,N<500),分別表示A、B的人數,保證人數合理性。
輸出
要求輸出一個整數,表示可以產生的花樣種數。
樣例輸入
1 2
樣例輸出
3
思路:我們從頂開始往下分析,對于這一行的字符串排列順序,如果開頭確定了,那么后面的隨之也就確定了,因此分類討論就可以了。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;int n,m;inline ll dfs(int a,int b,int len,string s) {if(a==0&&b==0) return 1ll;if(len==0) return dfs(a-1,b,1,"A")+dfs(a,b-1,1,"B");else{string t="";int c=a,d=b;ll sum=0;if(s[0]=='A') {if(c>=2){t+="AA";c-=2;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";}if(d>=2){t+="BB";d-=2;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";}}c=a,d=b,t="";if(s[0]=='B'){if(c&&d){t+="AB";c--,d--;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";t+="BA";c--,d--;for(int i=1;i<s.length();i++) {if(s[i]=='A'&&t[i-1]=='A'&&c) t+='A',c--;else if(s[i]=='A'&&t[i-1]=='B'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='A'&&d) t+='B',d--;else if(s[i]=='B'&&t[i-1]=='B'&&c) t+='A',c--;}if(t.length()==len+1) sum+=dfs(c,d,len+1,t);c=a,d=b,t="";}}return sum;} } int main() {while(~scanf("%d%d",&n,&m)){printf("%lld\n",dfs(n,m,0,""));}return 0; }

努力加油a啊,(o)/~

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的[蓝桥杯][2015年第六届真题]机器人塔(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。