天天看點

2015年藍橋杯——牌型種數

2015年藍橋杯——牌型種數

小明被劫持到X賭城,被迫與其他3人玩牌。 一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。 這時,小明腦子裡突然冒出一個問題: 如果不考慮花色,隻考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢? 請填寫該整數,不要填寫任何多餘的内容或說明文字。

思路分析:凡是題目要求求出滿足某種要求的種類或者數目首先想到的就是深度優先算法,但是傳統的深度優先在解決這道題的時候很棘手,因為剪枝設計十分複雜,是以不使用傳統的回溯法,而是一徑到底,記錄首選位置。

// An highlighted block
# include <iostream>

using namespace std;
int ans=0;
int a[14];
void dfs(int dep,int fir)
{
	if(dep==14)
	{
		ans++;
		return ;
	}

	for(int i=fir;i<=13;i++)
	{
		if(a[i]>0)
		{
			a[i]=a[i]-1;
			dfs(dep+1,i);
			a[i]=a[i]+1;
		}
	}
}
int main()
{
	for(int i=1;i<=13;i++)
		a[i]=4;

	dfs(1,1);
	cout<<ans;
	system("pause");
	return 0;
};
           

繼續閱讀