[NOIP2015] 斗地主 大爆搜
考试的时候想了半天,实在是想不到解决的办法,感觉只能暴力。。然后暴力也懒得打了,小数据模拟骗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] 斗地主 大爆搜的更多相关文章
- noip 2015 斗地主 大爆搜!!!
反正肯定是大模拟 但是每一个可以出的牌都搜一定不是最优的 考虑最特殊的出牌方案:顺子(单,对,三) 每一种方案再加上暴力贪心打出剩下的牌的步数 #include<cstdio> #incl ...
- bzoj4325: NOIP2015 斗地主(爆搜+模拟)
去年的我还不会打斗地主呵呵 觉得这道题挺难的..抄了一遍题解,感触挺多的= = 首先出牌的方式太多了不能每次都枚举所有的出牌方式, 于是分成两部分:1.顺子 2.带牌等其他 每次dfs都搜顺子,而且顺 ...
- [NOIP2009] 靶形数独 骚气的大爆搜
这两天OD留的题是搜索,这个东西,就是历年的NOIP压轴题嘛.做了几道什么斗地主啊啥的,感觉还是这题我还懂点. 这道题的搜(xia)索(da)思路是这样的:预处理出一切能处理的东西. 数独大家都了解吧 ...
- NOIP2013华容道 大爆搜
预处理出每个点周围四个点互相到达的最短路,再在整个图上跑SPFA,要记录路径 #include<cstdio> #include<cstring> #include<io ...
- NOIP2015斗地主题解 7.30考试
问题 B: NOIP2015 斗地主 时间限制: 3 Sec 内存限制: 1024 MB 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共 ...
- [补档][NOIP2015] 斗地主
[NOIP2015] 斗地主 题目 传送门:http://cogs.pro/cogs/problem/problem.php?pid=2106 INPUT 第一行包含用空格隔开的2个正整数Tn,表示手 ...
- [NOIP2015] 斗地主(搜索)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- hdu4536-XCOM Enemy Unknown(爆搜)
XCOM-Enemy Unknown是一款很好玩很经典的策略游戏. 在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.每次进攻外星人会选择3 ...
随机推荐
- Selenium chrome配置代理Python版
环境: windows 7 + Python 3.5.2 + Selenium 3.4.2 + Chrome Driver 2.29 + Chrome 58.0.3029.110 (64-bit) S ...
- 【LeetCode】190. Reverse Bits
题目: Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented ...
- 静态变量和Session
静态变量: Application级别的,不同客户端访问同一个变量. Session:对于每个访问的客户端是独立的,都有一个唯一的SessionID.也就是说,不同客户端下,都可以有一个Session ...
- 前端解读Webview
作为盛行已久的开发方式,Hybrid的相关介绍已经是相当普遍了.不过看到博客园里基本上都是从android或者ios的角度来讲解的,对于h5的前端来说看起来只能是一直半解.感觉有必要从前端的角度来理解 ...
- JavaWeb 后端 <八> 之 JDBC基礎(全)
一.JDBC简介 1.JDBC是SUN公司为了简化操作数据推出一套规范.数据库厂商的驱动就是对JDBC的实现. 2.Java Data Base Connectivity(java数据库连接),它主要 ...
- 关于EF 通用增删改查的封装
1. Entity Framework是Microsoft的ORM框架,随着 Entity Framework 不断的完善强化已经到达了EF 6.0+ 还是非常的完善的,目前使用的比例相对于其他OR ...
- LInux基础命令分类
1. 命令的概念 命令的执行过程 系统第一次执行外部命令时Hash缓存表为空,系统会先从PTAH路径下寻找命令,找到后会将路径加入到Hasa缓存中,当再次执行此命令时会直接从Hash的路径下执行,如果 ...
- 介绍一个全局最优化的方法:随机游走算法(Random Walk)
1. 关于全局最优化求解 全局最优化是一个非常复杂的问题,目前还没有一个通用的办法可以对任意复杂函数求解全局最优值.上一篇文章讲解了一个求解局部极小值的方法--梯度下降法.这种方法对于求解精度不高 ...
- MySQL中的联合索引学习教程
MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到 ...
- nyoj_61: 传纸条(一)
题目链接 使用双线dp,假设两个人同时从左上角移动到右下角,且满足路线不交叉,另k=x1+y1=x2+y2压缩状态进行优化.每次状态转移满足 x1,x2,y1,y2都在矩阵范围内,且(x2,y2)在相 ...