牌型种数-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;
}

 

posted @ 2019-03-07 19:12  知道了呀~  阅读(737)  评论(1编辑  收藏  举报