题面

自己网上去搜吧…

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
#define INF 10000000
#define maxn 40
using namespace std;int t,n,temp,a,zhang[maxn],ans=INF;void dfs(int,int,int,int);
void shunzi(int,int,int,int,int);void chu(int x,int dep,int left){//在第dep手牌的时候出x号牌,还剩left张牌 if(x>14) return;if(dep>ans) return;//如果比当前最优解差就跳出 if(left==0){ ans=min(ans,dep); return; }//如果剩下的手牌为0,记录答案 if(zhang[x]==0) chu(x+1,dep,left);//如果x号牌出完了就该出x+1号牌 else for(int i=zhang[x];i>0;i--) dfs(x,i,dep,left);//搜索第x号牌出1~出完的情况 return;
}void dfs(int p,int shu,int dep,int left){//第p张牌出shu张,出了dep手牌,剩下left张牌 if(shu==4){zhang[p]-=4;chu(p,dep+1,left-4);//出炸弹//出四带二(四带一对,四带两对,四带两张) for(int i=p+1;i<=14;i++){if(zhang[i]>=1){zhang[i]--;for(int j=p+1;j<=14;j++){if(zhang[j]>=1){zhang[j]--;chu(p,dep+1,left-6);zhang[j]++;}}zhang[i]++;}}//四带两张或一对 for(int i=p+1;i<=14;i++){for(int j=i+1;j<=14;j++){if(zhang[i]>=2&&zhang[j]>=2){zhang[i]-=2; zhang[j]-=2;chu(p,dep+1,left-8);zhang[i]+=2; zhang[j]+=2;}}}//四带两对zhang[p]+=4;return;}else if(shu==3){zhang[p]-=3;//出三顺子if(p>2){for(int i=p+1;i<=14;i++){if(zhang[i]<3) break;else shunzi(p,i,3,dep,left);}}//出三带二for(int i=p+1;i<=14;i++){if(zhang[i]>=2){zhang[i]-=2;chu(p,dep+1,left-5);zhang[i]+=2;}} //出三带一for(int i=p+1;i<=14;i++){if(zhang[i]>=1){zhang[i]-=1;chu(p,dep+1,left-4);zhang[i]+=1;}}chu(p,dep+1,left-3);zhang[p]+=3; return;}else if(shu==2){zhang[p]-=2;//出双顺子if(p>2&&zhang[p+1]>=2&&zhang[p+2]>=2) for(int i=p+2;i<=14;i++){if(zhang[i]<2){break;}else shunzi(p,i,2,dep,left);}//出四带两对for(int i=p+1;i<=14;i++){if(zhang[i]>=4){zhang[i]-=4;chu(p,dep+1,left-6); //四带一对 for(int j=p+1;j<=14;j++){if(zhang[j]>=2){zhang[j]-=2;chu(p,p+1,left-8);zhang[j]+=2;}}zhang[i]+=4;}}//出三带二for(int i=p+1;i<=14;i++){if(zhang[i]>=3){zhang[i]-=3;chu(p,dep+1,left-5);zhang[i]+=3;}}//出单对chu(p,dep+1,left-2);zhang[p]+=2; return;}else if(shu==1){zhang[p]-=1;//出顺子if(p>2&&p<11&&zhang[p+1]>=1&&zhang[p+2]>=1&&zhang[p+3]>=1&&zhang[p+4]>=1){//因为大小王不能进顺子所以p<11 for(int i=p+4;i<=14;i++){if(zhang[i]<1){break;}else shunzi(p,i,1,dep,left);}}//出四带两张单牌for(int i=p+1;i<=14;i++){if(zhang[i]>=4){zhang[i]-=4;for(int j=p+1;j<=14;j++){if(zhang[j]>=1){zhang[j]-=1;chu(p,dep+1,left-6);zhang[j]+=1;}}zhang[i]+=4;}}//出三带一for(int i=p+1;i<=14;i++){if(zhang[i]>=3){zhang[i]-=3;chu(p,dep+1,left-4);zhang[i]+=3;}} //出单张chu(p,dep+1,left-1);zhang[p]+=1;return;}return;
}void shunzi(int x,int y,int type,int dep,int left){//从第x到y张牌开始出顺子,出type种顺子 for(int i=x+1;i<=y;i++) zhang[i]-=type;chu(x,dep+1,left-type*(y-x+1));for(int i=x+1;i<=y;i++) zhang[i]+=type;return;
}int main(){freopen("landlords.in","r",stdin);freopen("landlords.out","w",stdout);scanf("%d%d",&t,&n);while(t--){memset(zhang,0,sizeof(zhang));ans=INF;for(int i=1;i<=n;i++) {scanf("%d%d",&a,&temp);if(a==1) zhang[14]++;else zhang[a]++;}chu(0,0,n);printf("%d\n",ans);}return 0;
}//hcy太强辣~\(≧▽≦)/~啦啦啦 

转载于:https://www.cnblogs.com/leotan0321/p/6081376.html

【NOIp 2015】【DFS】斗地主相关推荐

  1. 【NOIP 2015】斗地主

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

  2. NOIP 2015 Day1T3 斗地主

    暴力不解释,数据随机生成,我们可以贪心的按打出牌的数量从多到少出,那么这样就能够使最优化剪枝起到很重要的作用,怎样简化代码呢?我从题解中发现了一种将单顺子,双顺子和三顺子合成一种的方法,具体实现看代码 ...

  3. NOIP 2015 蒟蒻做题记录

    昨天做了noip 2015 的题.因为之前做过几道,最开始做的很快,也都A了.可是子串斗地主运输计划什么的这些没做过的题还是把我恶心的不行QAQ我这个大蒟蒻还是没有A掉..所以说先写一下应该得到的暴力 ...

  4. [NOIP 2015]运输计划-[树上差分+二分答案]-解题报告

    [NOIP 2015]运输计划 题面: A[NOIP2015 Day2]运输计划 时间限制 : 20000 MS 空间限制 : 262144 KB 问题描述 公元 2044 年,人类进入了宇宙纪元. ...

  5. NOIP 2015 D1 T2 信息传递

    趁着我还活在网上 多写点题解 * NOIP 2015 D1 T2 信息传递* 2996: [NOIP2015]信息传递 D1 T2 Time Limit: 1 Sec Memory Limit: 12 ...

  6. NOIP 2015 提高组 初赛

    NOIP 2015 提高组 初赛 疑难点 学习 感悟. 一. 3. 示例如下(来自自个的理解): 101.101 十进制 转十进制1*10^2+0*10^1+1*10^0+1*10^-1+0*10^- ...

  7. NOIP 2015 普及组 初赛

    NOIP 2015 普及组 初赛 疑难点 学习 感悟. 本份试卷本人得分93,两处错误,一错在二.1.题,眼花了,多数了个数据3241:二错在四.2.题(5)空,该空写成rbound=mid-1,这个 ...

  8. NOIP 2015 简记

    Day 0 12点上车,坐在准备出发的车子上和一群同学打招呼,真是逗.. 由于1个同学忘带身份证,强行拖到1点钟才发车,RP这么差肯定要跪. 路上一群同学在玩关灯游戏,一想是POJ 1222,就顺手写 ...

  9. NOIP 2015 提高组 Day2

    期望得分:100+10+60=170 实际得分:100+10+35=145 http://www.cogs.pro/cogs/page/page.php?aid=16 T1 跳石头 时间限制:1 s  ...

最新文章

  1. RHEL6.3安装vsftpd
  2. linux rz xshell
  3. window10下搭建汇编环境(软件+资料)
  4. 开发笔记:掉落系统模块设计思路
  5. Java成神之路技术整理
  6. windows linux双系统_还在安装双系统? 试试 Windows 和 Linux 合体
  7. sed基本用法 sed文本块处理 、 sed高级应用
  8. html宽度满屏,宽度满屏的代码怎么样写?
  9. [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题 (2)
  10. 贵州大学计算机学院院长,贵州大学计算机科学与信息学院第七届研究生会干部选举大会...
  11. Android系统中设置TextView的字符间距
  12. 【B类】BI商业智能、大数据、Mysql、等系列课程集
  13. 康拓普:大屏、VR、网页…..数据可视化有哪些应用场景?
  14. 电商系统-优惠券叠加规则、优惠分摊介绍(三)
  15. CSS学习30:多媒体标签(视频音频)
  16. 金蝶物料辅助属性改造
  17. SAP 消息号 F5113 科目确认没有对交易. SKE (在会计科目表 XXXX 中)定义
  18. 个人站长怎么兼职赚钱
  19. 基于java的项目总结
  20. 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案

热门文章

  1. java bean工厂_从零构建轻量级Java Web框架
  2. 数据库:MySQL相关知识整理,值得收藏!
  3. Github上排名前五的开源网络监控工具
  4. 操作系统:166个Linux实用命令,太全了!
  5. 项目管理基础:项目的生存周期模型
  6. 操作系统基础:存储管理知识笔记(二)
  7. ubuntu mysql 内存满了_Ubuntu mysql可以把data防止到内存盘中
  8. 《Java 高并发》04 线程的基本操作
  9. 若川的 2021 年度总结,弹指之间
  10. Linux manjaro系统安装后无法连接wifi,解决方案