今天你17张牌能把我……
查看原帖
今天你17张牌能把我……
32379
Dickk楼主2019/7/8 17:33
#include<bits/stdc++.h>
using namespace std;
int t,n,ans;
int s[20];
void dfs(int step)
{
    int i,j,p[5];//每张牌最多4张 
    memset(p,0,sizeof(p));
    int flag=0;
    for (i=1;i<=14;i++)p[s[i]]++;
    if (s[14]==2){
        p[2]--;
        p[1]+=2;
        flag=1;
    }
    int cnt1=0,cnt2=0;
    for (i=1;i<=p[4];i++){//四带 
        if (p[1]>=2)p[1]-=2;else if (p[2]>=2)p[2]-=2;else if (p[2]>=1)p[2]-=1;else cnt1++;
    }
    for (i=1;i<=p[3];i++){//三带
        if (p[1]>=1)p[1]--;else if (p[2]>=1)p[2]--;else cnt2++;
    }
    if (flag&&p[1]>=2){
    	p[1]-=2;p[2]++;
    }
    if (cnt2>=2&&cnt1>=2){//拆3
        int mn=min(cnt1,cnt2);
    	p[3]-=mn;
    	cnt1-=mn;
    	cnt2-=mn;
	}
	if (cnt1>=1&&cnt2>=2){//拆4 
		p[4]--;
		cnt1--;
		cnt2-=2;
	}
	p[4]-=cnt1/2;//4带自己 
	p[3]-=cnt2/3;//3带自己 
	/*for (i=1;i<=4;i++)printf("%d ",p[i]);
	puts("");*/
    ans=min(ans,step+p[1]+p[2]+p[3]+p[4]);
    for (i=1;i<=8;i++)//单顺 
    {
      for (j=i;j<=12;j++)
      {
      	s[j]--;
      	if (s[j]<0)break;
      	if (j-i>=4)dfs(step+1);
      }
      if (j==13)j--;
      while (j>=i)s[j--]++;
    }
    for (i=1;i<=10;i++)//双顺 
    {
    	for (j=i;j<=12;j++)
    	{
    		s[j]-=2;
    		if (s[j]<0)break;
    		if (j-i>=2)dfs(step+1);
        }
        if (j==13)j--;
        while (j>=i)s[j--]+=2;
    }
    for (i=1;i<=10;i++)//三顺 
    {
        for (j=i;j<=12;j++)
        {
            s[j]-=3;
            if (s[j]<0)break;
            if (j-i>=1)dfs(step+1);
        }
        if (j==13)j--;
        while (j>=i)s[j--]+=3;
    }
}
//3 4 5 6 7 8 9 10 J Q  K  A  2  !
//1 2 3 4 5 6 7 8  9 10 11 12 13 14
int main()
{
    int i;
    scanf("%d%d",&t,&n);
    while (t--)
    {
      memset(s,0,sizeof(s));
      ans=1e9;
      for (i=1;i<=n;i++)
      {
      	int a,b;
      	scanf("%d%d",&a,&b);
      	if (a==0)s[14]++;
      	else if (a==1||a==2)s[a+11]++;
      	  else if (a>=3)s[a-2]++;
      }
      dfs(0);
      printf("%d\n",ans);
    }
    return 0;
}

斗弟主增强版,90分,贪心那部分真该不出来了,L姥爷救救我

2019/7/8 17:33
加载中...