zoukankan      html  css  js  c++  java
  • UCF Practice Local Contest 2018 (practice)Rummy Score (dfs)

     dfs,对于每个点数的牌,都有:不出、作为同花出、作为顺子出这三种选择

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[20],x,anss=0x3f3f3f3f;
    
    void dfs(int k)
    {
        if(k>13)
        {
            int sum=0;
            for(int i=1;i<=13;i++)
            {
                sum+=a[i]*i;
            }
            anss=min(anss,sum);
            return;
        }
        if(a[k]==0)
        {
            return dfs(k+1);
        }
        if(a[k]>=3)   //同花 
        {
            for(int i=3;i<=a[k];i++)
            {
                a[k]-=i;
                dfs(k);
                a[k]+=i;
            }
        }
        int t=0;
        for(int i=k;i<=13;i++)
        {
            if(a[i]==0)
            break;
            else t++;
            if(t>=3)   //顺子 
            {
                for(int j=k;j<=i;j++)
                {
                    a[j]--;
                }
                dfs(k);
                for(int j=k;j<=i;j++)
                {
                    a[j]++;
                }
            }
        }
        dfs(k+1);   //不出 
    }
    
    int main()
    {
        for(int i=1;i<=7;i++)
        {
            cin>>x;
            a[x]++;
        }
        dfs(1);
        cout<<anss<<endl;
    }
  • 相关阅读:
    ReentrantLock与synchronized的差别
    读TIJ -1 对象入门
    wikioi 2573 大顶堆与小顶堆并用
    开源 免费 java CMS
    UVA10972
    springboot5
    spring-boot4
    spring-boot3
    spring-boot2
    spring-boot1
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/12630864.html
Copyright © 2011-2022 走看看