大名鼎鼎的NOIP2015D1T3

题意:

由于一些众所周知的原因,没有完整题面……

给你一副斗地主的手牌(牌数<=23),问最少要几次能出完;

包含双王,没有癞子,连对要三连对以上,可以直接出三张同点数的牌(三对),可以出连着的三对,也可以三带一,三带二,但不能出飞机,可以四张带一对或两张单牌。

题解:

神题啊……orz……虽然写起来并不麻烦,但是当年这个神之题面真是雷倒了无数选手……

提前来做的原因是今天xfz出了一道毒瘤题(密码:yxqak)……是这题的弱化版(其实是道水题啦),本蒟蒻看到题面就吓傻了不敢打,改完题来膜一下原题……

首先注意到花色和点数大小是没用的(王也可以被带着出),且出牌时除非出顺子(连对,连三对),否则出牌的顺序是不会影响到最后答案的;

并且牌数很少(毕竟是斗地主嘛……),最多只会有四个顺子,所以可以直接暴力dfs把所有顺子找出来,枚举怎么出每一个顺子,然后再贪心处理当前的出牌情况;

很容易想到把牌组合起来出越多越好,贪心优先四带二,三带二,三带一,剩余的炸弹,三对,对子和单张直接出掉;

于是就……做完了。

ps:然而实际上由于本题数据太小,爆搜可以轻松通过

(听说欢乐斗地主上100w豆即可一秒切掉此题)

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
using namespace std;
typedef long long ll;
int t,n,x,y,ans,num[],tot[];
int gao(){
int ret=;
memset(tot,,sizeof(tot));
for(int i=;i<=;i++){
tot[num[i]]++;
}
while(tot[]&&tot[]>=){
tot[]--;
tot[]-=;
ret++;
}
while(tot[]&&tot[]>=){
tot[]--;
tot[]-=;
ret++;
}
while(tot[]&&tot[]){
tot[]--;
tot[]--;
}
while(tot[]&&tot[]){
tot[]--;
tot[]--;
ret++;
}
while(tot[]&&tot[]){
tot[]--;
tot[]--;
ret++;
}
return ret+tot[]+tot[]+tot[]+tot[];
}
void dfs(int nw){
if(nw>=ans)return;
ans=min(ans,nw+gao());
for(int i=,j;i<=;i++){
j=i;
while(num[j]>=&&j<=)j++;
if(j-i>=){
for(int k=i+;k<j;k++){
for(int l=i;l<=k;l++){
num[l]-=;
}
dfs(nw+);
for(int l=i;l<=k;l++){
num[l]+=;
}
}
}
}
for(int i=,j;i<=;i++){
j=i;
while(num[j]>=&&j<=)j++;
if(j-i>=){
for(int k=i+;k<j;k++){
for(int l=i;l<=k;l++){
num[l]-=;
}
dfs(nw+);
for(int l=i;l<=k;l++){
num[l]+=;
}
}
}
}
for(int i=,j;i<=;i++){
j=i;
while(num[j]&&j<=)j++;
if(j-i>=){
for(int k=i+;k<j;k++){
for(int l=i;l<=k;l++){
num[l]--;
}
dfs(nw+);
for(int l=i;l<=k;l++){
num[l]++;
}
}
}
}
}
int main(){
scanf("%d%d",&t,&n);
while(t--){
ans=inf;
memset(num,,sizeof(num));
for(int i=;i<=n;i++){
scanf("%d%d",&x,&y);
if(!x)x=;
if(x==)x=;
if(x==)x=;
num[x]++;
}
dfs();
printf("%d\n",ans);
}
return ;
}

[LOJ2422]【NOIP2015】斗地主的更多相关文章

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

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

  2. NOIP2015斗地主[DFS 贪心]

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

  3. BZOJ 4325: NOIP2015 斗地主

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

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

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

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

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

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

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

  7. 2106. [NOIP2015] 斗地主

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

  8. NOIP2015斗地主题解 7.30考试

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

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

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

  10. NOIP2015斗地主(搜索+模拟+贪心)

    %%%Luan 题面就不说了,和斗地主一样,给一组牌,求最少打几次. 注意一点,数据随机,这样我们瞎搞一搞就可以过,虽然直接贪心可以证明是错的. 枚举方法,每次搜索按照(三顺子>二顺子>普 ...

随机推荐

  1. solarwinds之配置系统管理(System manager)

    配置windows的 1.  打开System Manager   2.  点击new新加一个接口   3.  选择要监控的资源   4.  确认好自己要监控的资源后如下   5.  这里以监控内存使 ...

  2. runloop的source

    以上是完整的 CFRunLoop 和 CFRunLoopMode 的结构体源码(太长了我的妈,用不着看完),下面我精简一下,把重要的留下,看如下代码(可以仔细看一下,加深印象): 上面是精简出来比较关 ...

  3. Unity 组件的增、查、禁、删 代码书写

    using UnityEngine; public class NewBehaviourScript : MonoBehaviour { // Use this for initialization ...

  4. jQuery $.ajax跨域-JSONP获取JSON数据(转载)

    Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示 ...

  5. css——样式的继承

    css的样式继承 在上面这段代码中,p{}为父类,b{}为子类.b{}将继承p{}. 因为<b>在<p>里面,p{}为父类,b{}为子类. 继承方式: 如果子类没有,父类有,则 ...

  6. 密信(Mesince)首创全自动邮件加密,颠覆传统邮件加密软件

    电子邮件泄密已经成为一个全球性的日益严峻的安全问题,解决这个问题的唯一有效办法就是电子邮件内容先加密后发送.然而,使用基于S/MIME标准的传统邮件加密软件进行邮件加密,需要用户具备一定的技术基础.用 ...

  7. mac上virtualbox创建vm需要注意启动顺序

    创建好vm后,需要注意,按照下图,将vm的启动顺序设置成 硬盘,不然,你会一直处于安装的逻辑中

  8. Element源码阅读(1)

    一.目的 阅读element源码旨在了解其代码的组织架构模式, 代码编写的方式, 以及组件化的一些思路, 对照自己, 从而进步. 二. 源码阅读所得 1.在element源码中的mixins目录之下, ...

  9. 论文阅读笔记“Attention-based Audio-Visual Fusion for Rubust Automatic Speech recognition”

    关于论文的阅读笔记 论文的题目是“Attention-based Audio-Visual Fusion for Rubust Automatic Speech recognition”,翻译成中文为 ...

  10. JVM运行原理详解

    1.JVM简析:      作为一名Java使用者,掌握JVM的体系结构也是很有必要的.      说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Ja ...