考试的时候想了半天,实在是想不到解决的办法,感觉只能暴力。。然后暴力也懒得打了,小数据模拟骗30分hhh

然而正解真的是暴力。。大爆搜。。

然后我的内心拒绝改这道题(TAT)

不过在wcx大佬的帮助下,还是成功的弄过去了。

首先我们明确两个显而易见的问题:答案与花色无关,与出牌顺序无关(废话)

然后我们的切入点是,顺子(连顺等)和带牌(三带一等),因为他们是出牌多的大户。

结论:顺子一定比带牌优(因为可以多出单张)。(不信你可以尝试举出反例)

然后既然这样,我们就先举出全部用带牌的步数,然后一点一点用顺子更新就行了。

有个技巧:按照顺子顺序编号:3,4,5,6···K,A,2。这样的话就可以在循环找顺子的时候方便

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
#define N 60
int t,n;
int size[N];
int getnum(int x){//小技巧
	if(x==1)
	  return 12;
	if(x==2)
	  return 13;
	if(x==0)
	  return 14;
	return x-2;
}
int ans;
int doit(){//找到当前剩余牌下全部带牌的最小步骤
	int tmp=0;
	int tp[10]={0};
	pos(i,1,14){
		tp[size[i]]++;
	}
	while(tp[4]&&tp[2]>=2){//四带二
		tp[4]--;tp[2]-=2;tmp++;
	}
	while(tp[4]&&tp[1]>=2){//四带一
		tp[4]--;tp[1]-=2;tmp++;
	}
	while(tp[3]&&tp[2]>=1){//三带二
		tp[3]--;tp[2]-=1;tmp++;
	}
	while(tp[3]&&tp[1]>=1){//三带一
		tp[3]--;tp[1]-=1;tmp++;
	}
	tmp+=tp[1]+tp[2]+tp[3]+tp[4];//单牌
	return tmp;
}
void dfs(int cnt){
	if(cnt>ans)
	  return;
	int x=doit();
	ans=min(ans,cnt+x);
	pos(i,1,11){//三连对
		int j;
		for(j=i;size[j]>=3&&j<=12;j++);
		if(j-i<2)
			continue;
		for(int k=j;k-i>=2;k--){
			pos(l,i,k-1)
			  size[l]-=3;
			dfs(cnt+1);
			pos(l,i,k-1)
			  size[l]+=3;
		}
	}
	pos(i,1,10){//连对
		int j;
		for(j=i;size[j]>=2&&j<=12;j++);
		if(j-i<3)
			continue;
		for(int k=j;k-i>=3;k--){
			pos(l,i,k-1)
			  size[l]-=2;
			dfs(cnt+1);
			pos(l,i,k-1)
			  size[l]+=2;
		}
	}
	pos(i,1,8){//顺子
		int j;
		for(j=i;size[j]>=1&&j<=12;j++);
		if(j-i<5)
			continue;
		for(int k=j;k-i>=5;k--){
			pos(l,i,k-1)
			  size[l]--;
			dfs(cnt+1);
			pos(l,i,k-1){
			  size[l]++;
			}
		}
	}
}
int main(){
	scanf("%d%d",&t,&n);
	while(t--){
		memset(size,0,sizeof(size));
		pos(i,1,n){
			int x,y;
			scanf("%d%d",&x,&y);
			size[getnum(x)]++;
		}
		ans=doit();
		dfs(0);
		printf("%d\n",ans);
	}
	return 0;
}

  

[NOIP2015] 斗地主 大爆搜的更多相关文章

  1. noip 2015 斗地主 大爆搜!!!

    反正肯定是大模拟 但是每一个可以出的牌都搜一定不是最优的 考虑最特殊的出牌方案:顺子(单,对,三) 每一种方案再加上暴力贪心打出剩下的牌的步数 #include<cstdio> #incl ...

  2. bzoj4325: NOIP2015 斗地主(爆搜+模拟)

    去年的我还不会打斗地主呵呵 觉得这道题挺难的..抄了一遍题解,感触挺多的= = 首先出牌的方式太多了不能每次都枚举所有的出牌方式, 于是分成两部分:1.顺子 2.带牌等其他 每次dfs都搜顺子,而且顺 ...

  3. [NOIP2009] 靶形数独 骚气的大爆搜

    这两天OD留的题是搜索,这个东西,就是历年的NOIP压轴题嘛.做了几道什么斗地主啊啥的,感觉还是这题我还懂点. 这道题的搜(xia)索(da)思路是这样的:预处理出一切能处理的东西. 数独大家都了解吧 ...

  4. NOIP2013华容道 大爆搜

    预处理出每个点周围四个点互相到达的最短路,再在整个图上跑SPFA,要记录路径 #include<cstdio> #include<cstring> #include<io ...

  5. NOIP2015斗地主题解 7.30考试

    问题 B: NOIP2015 斗地主 时间限制: 3 Sec  内存限制: 1024 MB 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共 ...

  6. [补档][NOIP2015] 斗地主

    [NOIP2015] 斗地主 题目 传送门:http://cogs.pro/cogs/problem/problem.php?pid=2106 INPUT 第一行包含用空格隔开的2个正整数Tn,表示手 ...

  7. [NOIP2015] 斗地主(搜索)

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...

  8. POJ 1166 The Clocks (爆搜 || 高斯消元)

    题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...

  9. hdu4536-XCOM Enemy Unknown(爆搜)

    XCOM-Enemy Unknown是一款很好玩很经典的策略游戏. 在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.每次进攻外星人会选择3 ...

随机推荐

  1. 国内APM企业的现状

    19世纪美国西部掘金热大起,大家听闻有人挖到了金子一夜暴富,于是蜂拥而上,但是很多人失望而归,最后居然是卖铲子的人赚到了钱. APM在互联网+时代表示应用性能管理,就是掘金万亿互联网市场的“铲子”,主 ...

  2. 关于DOM中的model(将元素转成对象进行操作)

    DOM document (html, xml) object 将文档中的HTML元素转成js的对象 通过ID找到文档的元素转成js对象 var obj = document.getElementBy ...

  3. Log4Net不同日志类型写入到不同文件

    1. 一直在用log4net,从来没有自己整理过.实践出真知,只有自己整理过才能真正掌握. 2. log4net,应该读logfornet,以前一直说log4,log4............ 安装 ...

  4. raft如何实现Linearizable Read

    Linearizable Read通俗来讲,就是读请求需要读到最新的已经commit的数据,不会读到老数据. 对于使用raft协议来保证多副本强一致的系统中,读写请求都可以通过走一次raft协议来满足 ...

  5. MongoDB数据库索引

    前面的话 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录.这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查 ...

  6. 简单的小程序实现ATM机操作

    简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...

  7. iOS 模式详解—「runtime面试、工作」看我就 🐒 了 ^_^.

    引导 Copyright © PBwaterln Unauthorized shall not be *copy reprinted* . 对于从事 iOS 开发人员来说,所有的人都会答出「runti ...

  8. hdu_2222: Keywords Search(AC自动机模板题)

    题目链接 统计一段字符串中有多少个模板串在里面出现过 #include<bits/stdc++.h> using namespace std; ; struct Trie { ]; int ...

  9. [luogu P3128][USACO15DEC]Max Flow [LCA][树上差分]

    题目描述 Farmer John has installed a new system of  pipes to transport milk between the  stalls in his b ...

  10. nopCommerce 3.9 大波浪系列 之 事件机制(生产者、消费者)

    一.nop事件机制简介 应用场景:客户支付成功后,需要发送短信.邮件告知客户订单支付成功(短信.邮件由不同模块实现) 实现方法: 1.定义支付成功OrderPaidEvent事件. 2.定义短信,邮箱 ...