• b_zj_雀魂启动(分类讨论的回溯)


    给定13张牌,问加入1~9中的任意一张牌后,能否达成和牌(满足以下两个条件):

    • 14张牌中有2张相同数字的牌,称为雀头。
    • 除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)

    思路:暴力删除即可,更优的做法是使用计数来实现逻辑删除

    def dfs(A):
        if len(A)==2 and A[0]==A[1]: return 1
        for i in range(len(A)-4):
            if A[i]==A[i+4]: #统一种类的牌不能超过4张
                return 0
        for i in range(len(A)-2):
            # 刻子
            t=A[i]
            if t==A[i+2]:
                B=A.copy()
                B.remove(t)
                B.remove(t)
                B.remove(t)
                if dfs(B): return 1
            # 顺子
            elif (t in A) and (t+1 in A) and (t+2 in A):
                B=A.copy()
                B.remove(t)
                B.remove(t+1)
                B.remove(t+2)
                if dfs(B): return 1
        return 0
    
    A,ans=list(map(int, input().split())),[]
    for i in range(1,10):
        cards=A.copy()
        cards.append(i)
        cards.sort()
        if dfs(cards): ans.append(i)
    ans=' '.join(str(x) for x in sorted(ans)) if ans else '0'
    print(ans)
    
  • 相关阅读:
    关于明确我校教学作息时间的通知
    放假时间
    五一上课表
    课表
    mysql 数据库备份与还原
    默默的追随
    2004上半年
    IE慢吗?
    创建的permission java.security.AllPermission;文件,用于加密
    数据库驱动
  • 原文地址:https://www.cnblogs.com/wdt1/p/14166838.html
Copyright © 2020-2023  润新知