【回溯】B049_LQ_牌型種數(暴力枚舉 / dfs)

一、Problem

小明被劫持到X賭城,被迫與其他3人玩牌。一副撲克牌(去掉大小王牌,共52張),均勻發給4個人,每個人13張。

這時,小明腦子裏突然冒出一個問題:如果不考慮花色,只考慮點數,也不考慮自己得到的牌的先後順序,自己手裏能拿到的初始牌型組合一共有多少種呢?

請填寫該整數,不要填寫任何多餘的內容或說明文字。

3598180

二、Solution

題意:不計較花色的意思是:當有兩個排列 [A1,....][A_1, ....][A2,.....][A_2, .....],如果 A1A_1A2A_2 都是 2,即使 A1A_1A2A_2 的花色不同,都算一種組合… 😂

方法一:dfs

  • 每種牌都有 4 種選擇,比如:一張不拿,拿一張、拿兩張、拿三張、拿四張。
    • 至於一張不拿,k++ 的解釋是:一張不拿,就跳過這種牌了…
  • 只要最後滿足,牌數 c 以及牌種類 k 都等於 13 就算一種方案…
  • 可選的方案有二:
    • 方案一:13 重循環,每重循環從 0-4,sum(a1...a13)sum(a_1...a_{13}) 的總和爲 13 算一種方案。
    • 方案二:遞歸記錄每一種牌的數量以及當前牌的種類…🤦‍♂️
import java.util.*;
import java.io.*;
public class Main{
	static class Solution {
		int res;
		void dfs(int c, int k) {
			if (c > 13 || k > 13)
				return;
			if (c == 13 && k == 13) {
				res++;
				return;
			}
			for (int i = 0; i <= 4; i++)
				dfs(c+i, k+1);
		}
		void init() {
			dfs(0, 0);
			System.out.println(res);
		}
	}
    public static void main(String[] args) throws IOException {  
        Solution s = new Solution();
		s.init();
    }
}

複雜度分析

  • 時間複雜度:O(44)O(4^4)
  • 空間複雜度:O(...)O(...)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章