題目:
牌型種數:
小明被劫持到x賭城,被迫與其他3人玩牌。
一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。
這時,小明腦子裡突然冒出乙個問題:
如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?
請填寫該整數,不要填寫任何多餘的內容或說明文字。
【分析】:說白了就是1~13種數字,每一種有四張,從這52張選13張,不在乎順序。(突然想說乙個題外話,這種數字排列的題還挺常出現的,但一般不會簡單的讓你排列1~n之類,通常會搞點小技巧,要麼就是1~n中有幾個數的位置固定,排列其它位置的數;要麼就是1~n個數中排m(m<=n)個數就行了;還有就是上面的這種有重複的部分。)
1.如果緊張的話,第一想到的應該是暴力乙個,直接14個迴圈,初始條件從0到4,代表這一種牌拿幾張,拿牌總數為13張就算一種方法。了解就好,懶得寫了。
2.第二種編寫方面簡單多了,就是來個遞迴,回溯。呼叫自身13次,每一次在遞迴的for迴圈裡選擇拿這種牌的個數,然後繼續呼叫。這個dfs方法大神並不陌生,但是想強調乙個重點,就是dfs中的這個for迴圈裡的呼叫完了之後,要返回原來狀態,即沒有拿這種牌的狀態!!!
#include
int ans = 0, sum = 0;
void dfs(int cur)
else
} } int main()
3.在網上搜尋看到的,另乙個大神想到的是 動態規劃,這個真是我沒有想到的
假設牌是從1到13按順序取的,dp[i][j]表示取到第i號的牌,目前總共有j張牌的取法總數,那麼有狀態轉移方程(注意公式沒考慮邊界處理):
dp[i][j]=∑k=j−4jdp[i−1][k]
#include
using namespace std;
typedef long long ll;
ll dp[14][14]; // dp[i][j]: 當前到第i張牌,總共有j張牌時的解的個數
int main()
}cout << dp[13][13] << endl;
return 0;
}
總之,這是道填空題 ,不管黑貓白貓,捉到jerry你才不是tom。 :) 第六屆藍橋杯 牌型種數
題目大意 52張去除大小鬼的撲克牌,問抽到的牌型有多少種 解題思路 做的時候思路還不夠清晰,要加油了,第九屆藍橋杯滿打滿算只剩39天了!本題可以暴力,要寫13個迴圈,太冗長。於是改用爆搜,從這13個牌型每次搜尋乙個牌型拿的張數,遞迴出口是把13種牌型選完從52張牌抽出13張的話次數就 1,本來用乙個...
第六屆藍橋杯 JavaA 牌型種數
牌型種數 小明被劫持到x賭城,被迫與其他3人玩牌。一副撲克牌 去掉大小王牌,共52張 均勻發給4個人,每個人13張。這時,小明腦子裡突然冒出乙個問題 如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?請填寫該整數,不要填寫任何多餘的內容或說明文字...
第六屆藍橋杯省賽C B組 牌型種數
小明被劫持到x賭城,被迫與其他3人玩牌。一副撲克牌 去掉大小王牌,共52張 均勻發給4個人,每個人13張。這時,小明腦子裡突然冒出乙個問題 如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裡能拿到的初始牌型組合一共有多少種呢?請填寫該整數,不要填寫任何多餘的內容或說明文字。首先我們...