题面戳我

题解

我原来也觉得是一道不可做的难题。。

其实,,,很简单的啦。。。

对于当前状态

我们出牌的方式大致分为两类

一类是不用考虑点数的,包括单张,对子,三带一等

另一类就是需要考虑点数的,包括顺子等

因此,每种状态下,首先考虑不用考虑点数的出牌方法

尝试打完,更新打完。

搜索的作用是考虑要考虑点数的出牌方法

每次搜索去掉若干张牌,然后递归,继续考虑不考虑点数的出牌方法。

然后就发现这道题目特别简单啦。。。

(还没懂就看代码吧。。。)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
using namespace std;
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int ans,N,a[20];
void DFS(int st)
{
if(st>ans)return;
int b[5];
b[1]=b[2]=b[3]=b[4]=0;
for(int i=1;i<=14;++i)b[a[i]]++;
//方式1:四张带两张/对
for(int i=1;i<=14;++i)
if(a[i]==4)
{
if(b[1]>1){b[1]-=2;continue;}//带走两张单牌
else if(b[2]>1){b[2]-=2;continue;}//带走两对牌
else if(b[2]){b[2]--;continue;}//只能带走一对
}
//方式2:三张带一张/对
for(int i=1;i<=14;++i)
{
if(a[i]==3)
{
if(b[1])b[1]--;//带一张
else if(b[2])b[2]--;//带一对
}
}
ans=min(st+b[1]+b[2]+b[3]+b[4],ans);//上面的出牌方式和ans比较
//接下来的方式需要考虑牌的点数
int pos;
for(int i=1;i<=8;++i)//顺子的开始位置
{
pos=12;
for(int j=i;j<13;++j)//最多打到A
{
a[j]--;//打出顺子
if(a[j]==-1){pos=j;break;}//没有这么多牌呀。。。
if(j-i>3)DFS(st+1);//打出了一个顺子
}
while(pos>=i)a[pos--]++;//回溯
}
for(int i=1;i<=10;++i)
{
pos=12;
for(int j=i;j<13;++j)
{
a[j]-=2;
if(a[j]<0){pos=j;break;}
if(j-i>1)DFS(st+1);//一个双顺子
}
while(pos>=i)a[pos--]+=2;
}
for(int i=1;i<=11;++i)
{
pos=12;
for(int j=i;j<13;++j)
{
a[j]-=3;
if(a[j]<0){pos=j;break;}
if(j-i)DFS(st+1);
}
while(pos>=i)a[pos--]+=3;
}
}
int main()
{
int T=read();N=read();
while(T--)
{
memset(a,0,sizeof(a));
for(int i=1;i<=N;++i)
{
int x=read(),y=read();
if(x==0)a[14]++;
else if(x<3)a[x+11]++;
else a[x-2]++;
}
ans=N;
DFS(0);
printf("%d\n",ans);
}
return 0;
}

【NOIP2015】斗地主(搜索,贪心)的更多相关文章

  1. 【BZOJ4325】NOIP2015 斗地主 搜索+贪心

    这个东西考试的时候一眼以为状压就压炸了考试又了一下午.....最后我打出来发现后几个点10min都过不去,我大概算了一下,可能是吧.......最后一脸懵逼的我去怂了正解,我们发现只要确定了顺子就可以 ...

  2. NOIP2015斗地主[DFS 贪心]

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

  3. 【BZOJ4325】NOIP2015 斗地主 搜索+剪枝

    [BZOJ4325]NOIP2015 斗地主 Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗 ...

  4. 2018.11.01 bzoj4325: NOIP2015 斗地主(贪心+搜索)

    传送门 原来一直以为是一道大模拟. 没想到是一道搜索+最优性剪枝 如何搜最优呢? 我们考虑怎么最快出完. 大概是应该尽量出当前能出出去最多的吧. 于是我们选择优先出顺子. 这样做有什么好处呢? 我们会 ...

  5. 洛谷 2668&2540 斗地主——搜索+贪心+dp

    题目:https://www.luogu.org/problemnew/show/P2540 发现如果没有顺子,剩下的可以贪心.所以搜索顺子怎么出,然后贪心. 这样只能过不加强版.原因是贪心的时候难以 ...

  6. 洛谷 P2668 & P2540 [ noip 2015 ] 斗地主 —— 搜索+贪心

    题目:https://www.luogu.org/problemnew/show/P2668   https://www.luogu.org/problemnew/show/P2540 首先,如果没有 ...

  7. LOJ2422 NOIP2015 斗地主 【搜索+贪心】*

    LOJ2422 NOIP2015 斗地主 LINK 题目大意很简单,就是问你斗地主的一分手牌最少多少次出完 然后我们发现对于一种手牌状态,不考虑顺子的情况是可以贪心做掉的 然后我们直接枚举一下顺子出牌 ...

  8. NOIP2015 斗地主(搜索+剪枝)

    4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 270  Solved: 192[Submit][Status] ...

  9. 2106. [NOIP2015] 斗地主

        2106. [NOIP2015] 斗地主 ★★★☆   输入文件:landlords.in   输出文件:landlords.out   简单对比 时间限制:2 s   内存限制:1025 M ...

  10. BZOJ 4325: NOIP2015 斗地主

    4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 684  Solved: 456[Submit][Status] ...

随机推荐

  1. Windows下Nginx的配置及配置文件部分介绍

    一.在官网下载 nginx的Windows版本,官网下载:http://nginx.org/download/ 选择你自己想要的版本下载,解压 nginx(例如nginx-1.6.3) 包到你的win ...

  2. WEB-INF目录下文件复制的几种方式

    2018年1月31日 10:42:55 工作完写点博客记录下. 需求:从web-inf下拷贝文件到指定目录. 目录结构 直接贴代码 第一种方式,字节流读取 try { int index = 0; S ...

  3. 模板方法模式和JDBCTemplate(一)

    本篇博客的目录: 一:模板方法模式介绍 二:模板方法模式的简单实现 三:总结 一:模板方法模式的介绍 1.1:模板方法模式的定义 定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中.Templat ...

  4. 浅显总结ASCII Unicode UTF-8的区别

    如果觉得此地排版不好,欢迎访问我的博客 浅显总结ASCII Unicode UTF-8的区别 制作表单时,为了追求更好的用户交互体验,常常会有提示性的内容,比如提醒用户字符的限制.由于英文,中文字符的 ...

  5. iOS通知传值的使用

    通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便.便捷,一个简单的Demo实现通知的跳转传值. 输入所要发送的信息 ,同时将label的值通过button方法调用传递, - (IB ...

  6. Navi.Soft31.任务管理器(定时同步+数据采集)

    1系统简介 1.1功能简述 在众多的软件分类中,有几类的软件不是很重要,但也很重要.它们有的是每隔一段时间需要执行一些任务的软件,我们叫它定时类软件:还有一种软件是采集网页中的数据,我们叫它采集类软件 ...

  7. Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  8. 机器学习之支持向量机(二):SMO算法

    注:关于支持向量机系列文章是借鉴大神的神作,加以自己的理解写成的:若对原作者有损请告知,我会及时处理.转载请标明来源. 序: 我在支持向量机系列中主要讲支持向量机的公式推导,第一部分讲到推出拉格朗日对 ...

  9. 用Git的hooks实现项目的自动部署

    https://segmentfault.com/a/1190000003836345?_ea=386770 http://blog.csdn.net/wsyw126/article/details/ ...

  10. Apache服务器安装-apache已经卸载,如何删除注册在系统的服务

    cmd进入windows的命令行客户端,执行:sc delete apache 注意:以管理员的身份删除,同理,此方法也可以删除其他类似的服务.例如sc delete MongoDB.