牌型种数-dfs-蓝桥杯2015
牌型种数
牌型种数 小明被劫持到 X 赌城,被迫与其他 3 人玩牌。 一副扑克牌(去掉大小王牌,共 52 张),均匀发给 4 个人,每个人 13 张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的 初始牌型组合一共有多少种呢? 请填写该整数,不要填写任何多余的内容或说明文字。
答案:
3598180
#include<iostream>
#include<algorithm>
using namespace std;
int num=0;
void dfs(int cnt,int now)//cnt是当前有几种类型的牌,now是现在有几张牌
{
if(now>13||cnt>13)
{
return ;
}
else if(now==13)
{
num++;
return ;
}
else
{
for(int i=0;i<5;i++)//对每一种类型的牌有5种情况,取0/1/2/3/4张
{
now=now+i;
dfs(cnt+1,now);
now=now-i;//回溯
}
}
}
int main()
{
dfs(0,0);
cout<<num<<endl;
return 0;
}
等风起的那一天,我已准备好一切