吉首大学第八届“新星杯”大学生程序设计大赛 I: 夫子云游(简单搜索)

【题目】

夫子云游

题目描述

改编自猫腻所著的同名小说《将夜》目前正在火热开播,其中男主角宁缺在考书院二层楼时遇一题“那年春,夫子出国游历,遇桃山美酒,遂寻径登山赏桃品酒,一路摘花饮酒而行,始斩一斤桃花,饮一壶酒,后夫子惜酒,故再斩一斤桃花,只饮半壶酒,再斩一斤桃花,饮半半壶酒,如是而行……至山顶,夫子囊中酒尽,惘然四顾,问:夫子一共斩了几斤桃花,饮了几壶酒?”而当我们的男主角宁缺看到这道题目时,更是直接来了句“谁出的这道题,太二了”,紧接着就提笔写下了“夫子饮二壶酒,斩尽满山桃花”后直接就交卷走人了赢得书院弟子的大赞。

今夫子再次游历,他提着酒壶,从出院出来,酒壶中有酒2斗,他边走边唱:

    无事街上走,提壶去打酒。
    逢店加一倍,遇花喝一斗。

这一路上,他一共遇到店M(0
请计算夫子遇到店和花的合理的次序种数。

可以把遇店记为a,遇花记为b,如果M=5,N=10。则:babaabbabbabbbb 就是合理的次序之一。

输入

M、N 分别为遇到店和花的次数

输出

所有可能店和花次序方案的个数

样例输入 Copy

5 10

样例输出 Copy

14

【题解】

简单搜索,就两种状态,要么遇花,要么遇店。

【代码】

#include 
using namespace std;
int a[105],vis[105],ans;
void dfs(int m,int n,int t)
{
    if(m==0&&n==0) 
    {
        if(t==0) ans++;
        return;
    }
    if(t==0) return;
    if(m) dfs(m-1,n,t*2);
    if(n) dfs(m,n-1,t-1);
}
int main()
{
    int m,n;
    while(~scanf("%d%d",&m,&n))
    {
        ans=0;
        dfs(m,n,2);
        printf("%d\n",ans);
    }
    return 0;
}

 

你可能感兴趣的:(吉首大学第八届“新星杯”大学生程序设计大赛 I: 夫子云游(简单搜索))