题目描述

牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏。在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王3<4<5<6<7<8<9<10<J<Q<K<A<2<\text{小王}<\text{大王}3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由 nnn 张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。

现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以将它们打光。请你帮他解决这个问题。

需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:

本题数据随机,不支持hack,要hack或强力数据请点击这里

-----------------------------------------------------------------------------------------------------------------

搜索经典题目。

没什么别的思路,就是dfs+贪心

总体策略:先打顺子再打三带最后打单牌和对子

坑点巨多,调了好久才调出来……

#include<bits/stdc++.h>
using namespace std;
int T,n,sum[],ans,output[];
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){
if (ch=='-') f=-;
ch=getchar();
}while(''<=ch&&ch<=''){
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
void dfs(int x)
{
if (x>=ans) return;
int k=;
for (int i=;i<=;i++)
{
if (sum[i]==) k=;
else{
k++;
if (k>=){
for (int j=i;j>=i-k+;j--) sum[j]--;
dfs(x+);
for (int j=i;j>=i-k+;j--) sum[j]++;
}
}
}
k=;
for (int i=;i<=;i++)
{
if (sum[i]<=) k=;
else
{
k++;
if (k>=)
{
for (int j=i;j>=i-k+;j--) sum[j]-=;
dfs(x+);
for (int j=i;j>=i-k+;j--) sum[j]+=;
}
}
}
k=;
for (int i=;i<=;i++)
{
if (sum[i]<=) k=;
else
{
k++;
if (k>=)
{
for (int j=i;j>=i-k+;j--) sum[j]-=;
dfs(x+);
for (int j=i;j>=i-k+;j--) sum[j]+=;
}
}
}
for (int i=;i<=;i++)
{
if (sum[i]<=)
{
if (sum[i]<=) continue;
sum[i]-=;
for (int j=;j<=;j++)
{
if (sum[j]<=||j==i) continue;
sum[j]--;
dfs(x+);
sum[j]++;
}
for (int j=;j<=;j++)
{
if (sum[j]<=||j==i) continue;
sum[j]-=;
dfs(x+);
sum[j]+=;
}
sum[i]+=;
}
else
{
sum[i]-=;
for (int j=;j<=;j++)
{
if (sum[j]<=||j==i) continue;
sum[j]--;
dfs(x+);
sum[j]++;
}
for (int j=;j<=;j++)
{
if (sum[j]<=||j==i) continue;
sum[j]-=;
dfs(x+);
sum[j]+=;
}
sum[i]+=;
sum[i]-=;
for (int j=;j<=;j++)
{
if (sum[j]<=||j==i) continue;
sum[j]--;
for (int h=;h<=;h++)
{
if (sum[h]<=||j==h) continue;
sum[h]--;
dfs(x+);
sum[h]++;
}
sum[j]++;
}
for (int j=;j<=;j++)
{
if (sum[j]<=||j==i) continue;
sum[j]-=;
for (int h=;h<=;h++)
{
if (sum[h]<=||h==j) continue;
sum[h]-=;
dfs(x+);
sum[h]+=;
}
sum[j]+=;
}
sum[i]+=;
}
}
for (int i=;i<=;i++) if (sum[i]) x++;
ans=min(ans,x);
}
int main()
{
T=read(),n=read();int ff=T;
while(T--)
{
ans=0x7fffffff;
int x,y;
memset(sum,,sizeof(sum));
for(int i=;i<=n;i++)
{
x=read(),y=read();
if (x==) sum[]++;
else if(x==) sum[]++;
else sum[x]++;
}
dfs();
cout<<ans<<endl;
}
}

【NOIP2015】斗地主 题解(DFS+贪心)的更多相关文章

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

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

  2. NOIP2015斗地主题解 7.30考试

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

  3. ICPC Asia Nanning 2017 I. Rake It In (DFS+贪心 或 对抗搜索+Alpha-Beta剪枝)

    题目链接:Rake It In 比赛链接:ICPC Asia Nanning 2017 Description The designers have come up with a new simple ...

  4. NOIP2015斗地主[DFS 贪心]

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

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

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

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

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

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

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

  8. 【bzoj4813】[Cqoi2017]小Q的棋盘 树上dfs+贪心

    题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2…,V-1,它们是连通的 ...

  9. 2106. [NOIP2015] 斗地主

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

随机推荐

  1. 午间邂逅 | post 和 get 的兄弟情深

    前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 Github 博客 学习导图: image-20200710142453734 image-202007101431049 ...

  2. Redis实例讲解

    简介 Redis是一个key-value的nosql产品,和我们熟知的Memcached有些类似,但他存储value类型相对更加丰富,包括string(字符串),list(链表),set(集合),zs ...

  3. 记一次WPF程序带参数启动

    问题:总共有两个程序.第一个程序使用Process带参数启动第二个程序. 网上一堆人都说什么重写Main入口啊 什么的.然后还一堆人跟着复制发文章.我也是醉了,简直是坑人.为何要舍近求远,直接重写AP ...

  4. 【测试工具】这些APP实用测试工具,不知道你就out了!

    本期,我将给大家介绍14款实用的测试工具,希望能够帮到大家!(建议收藏) UI自动化测试工具 1. uiautomator2 Github地址:https://github.com/openatx/u ...

  5. GPO - Folder Mapping via GPO

    Create a Group Policy on AD DC Server. The GPO policy will come into effect on the next login, or us ...

  6. JAVA各种OOM代码样例及解决方法

    周末了,觉得我还有很多作业没有写,针对目前大家对OOM的类型不太熟悉,那么我们来总结一下各种OOM出现的情况以及解决方法. 我们把各种OOM的情况列出来,然后逐一进行代码编写复现和提供解决方法. 1. ...

  7. UC 网盘:我又回来了

    普通用户不限速下载,免费 10GB 空间,支持离线下载 这个域名非常厉害,某里挑选域名果然是值得称赞的.直接使用手机号即可注册登录,默认赠送 10GB 空间.不过目前好像没看到有电脑客户端,电脑上下载 ...

  8. 从零开始一起学Blazor WebAssembly 开发(4)

    登录模块基本完成了,登录主要用了以下几个点: 1.后端采用的Abp Vnext 框架,这个框架自带的IdentityServer4用户角色权限控制,这个框架登录研究了好一阵子,有几个坑这里说下: 1) ...

  9. three.js 数学方法之Matrix3

    今天郭先生来说一说three.js的三维矩阵,这块知识需要结合线性代数的一些知识,毕业时间有点长,线性代数的知识大部分都还给了老师.于是一起简单的复习了一下.所有的计算都是使用列优先顺序进行的.然而, ...

  10. vue学习(九) 使用内联样式设置style样式

    /html <div id="app"> //对象就是无序键值对的集合 <h1 :style="{ color:red, 'font-weight':2 ...