牌的组合数-python
问:四个人玩牌,去掉大小王,一个人拿牌的组合有多少种可能
方法一:DFS
# 牌的组合数.常识:13*4+2=54 张牌。每一类大小可以拿的张数有:0, 1, 2, 3, 4。问:四个人玩牌,一个人拿牌的组合数有多少种 count = 0 card_num = 0 def num_conbinations(): dfs(0) print(count) def dfs(card_size): global count global card_num # card_size: 牌的点数 card_num: 牌的张数 if card_size > 13: return if card_num == 13: count += 1 return if card_num > 13: return for i in range(5): # 每一类牌有0,1,2,3,4种方式 card_num += i dfs(card_size+1) card_num -= i num_conbinations()
方法二:dp思想
def find_card_combinations(): n = 13 dp = [[0]*(n+1) for _ in range(n+1)] for i in range(5): dp[1][i] = 1 for i in range(2, n+1): for j in range(n+1): dp[i][j] += dp[i-1][j] if j >= 1: dp[i][j] += dp[i-1][j-1] if j >= 2: dp[i][j] += dp[i-1][j-2] if j >= 3: dp[i][j] += dp[i-1][j-3] if j >= 4: dp[i][j] += dp[i-1][j-4] print("result: ",dp[n][n]) find_card_combinations()
参考:https://blog.csdn.net/ATFWUS/article/details/104758853
时刻记着自己要成为什么样的人!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)