題目描述:
話說大詩人李白,一生好飲。幸好他從不開車。
無事街上走,提壺去打酒。
逢店加一倍,遇花喝一斗。
這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。
請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。
注意:通過瀏覽器提交答案。答案是個整數。不要書寫任何多餘的內容。
首先說一下自己其中乙個錯誤的思路,收到前面做的象棋的影響,把整個局面想象成了乙個map,2×15,其中第一列為a第二列為b,利用dfs搜尋之後發現有很多重複的字串,還得判重,非常的麻煩,最終放棄,貼上第一次dfs的錯誤**。(2017/3/12)
//錯誤的示例,後續提醒自己不要犯錯2017/3/12
#include
#include
using
namespace
std;
char mapalpha[15][2] = ;
char alpha[15] = ;
bool idx[15][2] = ;
int count = 0;
int solve()
else}}
if (res == 0)
}void dfs(int i, int j, int k)
idx[i][j] = true; //idx標記訪問過的陣列
alpha[k - 1] = mapalpha[i][j];
if (k == 15) //當搜尋到乙個字串時檢視剩餘酒量
for (int x = 0; x <= 1; x++)}}
}int main()
else}}
dfs(0, 0, 1); //初始遍歷位置
dfs(0, 1, 1);
cout
<<"count: "
0;}
正確的思路
// 2017/3/13
#include
using
namespace
std;
char chr[15];
int count = 0;
//處理dfs搜尋的字串,有坑
void solve()
} else
if (chr[i] == 'b')}}
if (res == 0 && chr[14] == 'b' && ok)
}void dfs(int store, int flower, int k)
if (store == 5 && flower == 10 && k == 15) //最後一次返回條件,返回乙個遍歷後的字串
chr[k] = 'a'; //二叉樹的左側分叉
dfs(store + 1, flower, k + 1);
chr[k] = 'b'; //二叉樹的右側分叉
dfs(store, flower + 1, k + 1);
}int main()
李白打酒 DFS
話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...
藍橋杯 李白打酒 DFS
話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...
藍橋杯 李白打酒 (dfs)
話說大詩人李白,一生好飲。幸好他從不開車。一天,他提著酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱 無事街上走,提壺去打酒。逢店加一倍,遇花喝一斗。這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則 ba...