牌型种数
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
请填写该整数,不要填写任何多余的内容或说明文字。
————————————————
这道题反映了深度搜索的掌握程度不够!
思路: 不考虑花色,只考虑点数。
一个点数一个点数的考虑:
首先
点数为 1 的牌,拿一张,或者
点数为 1 的牌,拿两张,或者
点数为 1 的牌,拿三张,或者
点数为 1 的牌,拿四张,或者
然后
点数为 2 的牌,拿一张,或者
点数为 2 的牌,拿两张,或者
点数为 2 的牌,拿三张,或者
点数为 2 的牌,拿四张,这样一直深搜下去!
上代码:
package pastExamPaper;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/*
牌型种数
*/
public class Demo42 {
private static int ans;
public static void main(String[] args) {
dfs(0,0);
System.out.println(ans);//3598180
// System.out.println(ans);//1932053504
}
private static void dfs(int k, int cnt){
if ( k > 13 || cnt > 13 ) return;
if ( k == 13 && cnt == 13 ){
ans++;
return;
}
for ( int i = 0; i < 5; i++ ){
dfs(k+1, cnt+i);
}
}
}