大名鼎鼎的NOIP2015D1T3

题意:

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

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

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

题解:

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

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

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

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

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

于是就……做完了。

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

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

代码:

  1 #include<algorithm>
  2 #include<iostream>
  3 #include<cstring>
  4 #include<cstdio>
  5 #include<cmath>
  6 #include<queue>
  7 #define inf 2147483647
  8 #define eps 1e-9
  9 using namespace std;
 10 typedef long long ll;
 11 int t,n,x,y,ans,num[17],tot[5];
 12 int gao(){
 13     int ret=0;
 14     memset(tot,0,sizeof(tot));
 15     for(int i=3;i<=16;i++){
 16         tot[num[i]]++;
 17     }
 18     while(tot[4]&&tot[2]>=2){
 19         tot[4]--;
 20         tot[2]-=2;
 21         ret++;
 22     }
 23     while(tot[4]&&tot[1]>=2){
 24         tot[4]--;
 25         tot[1]-=2;
 26         ret++;
 27     }
 28     while(tot[4]&&tot[2]){
 29         tot[4]--;
 30         tot[2]--;
 31     }
 32     while(tot[3]&&tot[2]){
 33         tot[3]--;
 34         tot[2]--;
 35         ret++;
 36     }
 37     while(tot[3]&&tot[1]){
 38         tot[3]--;
 39         tot[1]--;
 40         ret++;
 41     }
 42     return ret+tot[1]+tot[2]+tot[3]+tot[4];
 43 }
 44 void dfs(int nw){
 45     if(nw>=ans)return;
 46     ans=min(ans,nw+gao());
 47     for(int i=3,j;i<=14;i++){
 48         j=i;
 49         while(num[j]>=3&&j<=14)j++;
 50         if(j-i>=2){
 51             for(int k=i+1;k<j;k++){
 52                 for(int l=i;l<=k;l++){
 53                     num[l]-=3;
 54                 }
 55                 dfs(nw+1);
 56                 for(int l=i;l<=k;l++){
 57                     num[l]+=3;
 58                 }
 59             }
 60         }
 61     }
 62     for(int i=3,j;i<=14;i++){
 63         j=i;
 64         while(num[j]>=2&&j<=14)j++;
 65         if(j-i>=3){
 66             for(int k=i+2;k<j;k++){
 67                 for(int l=i;l<=k;l++){
 68                     num[l]-=2;
 69                 }
 70                 dfs(nw+1);
 71                 for(int l=i;l<=k;l++){
 72                     num[l]+=2;
 73                 }
 74             }
 75         }
 76     }
 77     for(int i=3,j;i<=14;i++){
 78         j=i;
 79         while(num[j]&&j<=14)j++;
 80         if(j-i>=5){
 81             for(int k=i+4;k<j;k++){
 82                 for(int l=i;l<=k;l++){
 83                     num[l]--;
 84                 }
 85                 dfs(nw+1);
 86                 for(int l=i;l<=k;l++){
 87                     num[l]++;
 88                 }
 89             }
 90         }
 91     }
 92 }
 93 int main(){
 94     scanf("%d%d",&t,&n);
 95     while(t--){
 96         ans=inf;
 97         memset(num,0,sizeof(num));
 98         for(int i=1;i<=n;i++){
 99             scanf("%d%d",&x,&y);
100             if(!x)x=16;
101             if(x==1)x=14;
102             if(x==2)x=15;
103             num[x]++;
104         }
105         dfs(0);
106         printf("%d\n",ans);
107     }
108     return 0;
109 }

转载于:https://www.cnblogs.com/dcdcbigbig/p/9872655.html

[LOJ2422]【NOIP2015】斗地主相关推荐

  1. 2106. [NOIP2015] 斗地主

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

  2. [NOIP2015] 斗地主

    斗地主 最后还是去看了题解,也算把坑填了吧.感觉大概是懂了,写一下思路.主要是因为还是老感觉哪里别扭想找个地方说出来 先放上代码 1 #include<bits/stdc++.h>//如果 ...

  3. noip2017考前整理(未完)

    快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...

  4. [杂言] GoodBye,2016

    呼-- 2016年终于要过去了-- 就在这一年,我开始了-- 也就在这一年,我GG了-- 谨以此文纪念我过得不怎么好的2016. 一月 (我还是萌新求轻虐) 当时还在学习背包和深搜,突然dayu把yb ...

  5. NOIP2017暨2017年9月——11月学习总结

    NOIP2017结束了啊..在考场中心情起起伏伏..先是看一眼D2T1就想到思路的小兴奋..又是大样例调不过的紧张..还有找出代码里错误的那一刻的激动..(不知道会不会被卡常啊..)整个比赛的过程还是 ...

  6. [比赛|考试] 9月第一周的考试

    Sept 8th Sat 牛客网普及组赛(360pts/400pts)(100/100/100/60) T1水题不放代码,来个链接 T2乱膜膜就行了,注意膜出来是0要变成N,还有开longlong比较 ...

  7. 【NOIP2015 DAY1 T3 】斗地主(landlords)

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

  8. 【NOIP2015提高组Day1】斗地主

    嘿嘿,学老贺乱搞 文章目录 题面 心路历程 题解 官方版本 代码 彭奆版本 本人解法 代码 题面 博弈论??? 贪心??? 一脸懵逼*1??? 一脸懵逼*2??? 一脸懵逼*3??? ???????? ...

  9. 【NOIP2015】洛谷2668 斗地主

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

最新文章

  1. 转 前端工程师凭什么这么值钱?
  2. 规格表管理之更新规格表数据
  3. 【UVALive 4642】Malfatti Circles(圆,二分)
  4. [Leetcode][第75题][JAVA][颜色分类][双(三)指针][计数排序]
  5. 【转】一个ASP.NET MVC中ajax调用WebApi返回500 Internal Server Error的调错方法。
  6. PHP中英文截取函数,php字符串截取函数,支持中英文混体
  7. 中国工程院院士和科学院院士有什么区别,谁贡献很大却没有入院士?
  8. (软件工程复习核心重点)第六章实现和测试-第二节:软件测试基础
  9. MySQL中的SQL Mode及其作用
  10. 3-20Pytorch与张量裁剪运算
  11. C#面向对象系列(2):构造函数的用法
  12. 作业4:结对编程项目四则运算
  13. POJ 3321 Apple Tree 【树状数组+建树】
  14. 微信小程序弹框wx.showModal如何修改样式
  15. [buuctf] crypto全解——85-120(不建议直接抄flag)
  16. 正态性检验中的统计量D值和统计量W值如何计算?
  17. 企业邮箱申请注册流程,10分钟搞定公司企业邮箱
  18. vc模拟 tabletpc_业力和TabletPC笔
  19. Regin恶意软件:何以潜伏如此久?
  20. 360视频:金字塔棱台投影TSP

热门文章

  1. 接盘恒大、清债,自救的华远地产能度过地产寒冬吗?
  2. blackjack java gui_求助一个java的题,blackjack, class 分为Card 和Deck,求大神帮我做一个程序...
  3. ubuntu 软件包管理
  4. HBuilderX wifi无线真机调试
  5. 中国android手机市场占有率,Android成全球第二大手机系统 市场份额达26%
  6. oracle 000000000A2F6630,数据导入新库时发生错误
  7. 大咖们都在用的三大引流拓客方案,学会一个就够用
  8. ltsc系统升级为服务器,微软宣布Win11将像Win10一样每月提供更新 且有长期服务版本LTSC...
  9. python实现刷问卷星份数(面向对象)
  10. 美nv写真手机壁纸采集源码