P2540斗地主增强版 

参考大佬题解

思路:顺子暴力搜,剩下的牌我不会贪心所以用记忆化搜索(或者dp);

注意:双王不能当对,二不算顺子

代码

  1 #include <cstdio>
  2 #include <iostream>
  3 #include <cstring>
  4 #include <cctype>
  5 #include <algorithm>
  6 using namespace std;
  7
  8 #define res register int
  9 #define inf 0x3f3f3f3f
 10 inline int read() {
 11     int x(0),f(1); char ch;
 12     while(!isdigit(ch=getchar())) if(ch=='-') f=-1;
 13     while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
 14     return x*f;
 15 }
 16
 17 int n,T,ans;
 18 int a[20];
 19 int f[25][25][25][25];
 20 //单个牌的数目,双,三,四,王
 21 int c[5];
 22
 23 template <typename T>
 24 inline T my_max(T a,T b) {return a<b?a:b;}
 25 template <typename T>
 26 inline T my_min(T a,T b) {return a<b?a:b;}
 27
 28 int calc(int a,int b,int c,int d)
 29 {
 30     if(a<0 || b<0 || c<0 || d<0) return inf;
 31     if(!c && !d)    return a+b;
 32     if(~f[a][b][c][d]) return f[a][b][c][d];
 33     //拆四
 34     int tmp=my_min(calc(a+1,b,c+1,d-1),calc(a+2,b+2,c,d-1));
 35     //拆三
 36     tmp=my_min(tmp,my_min(calc(a+1,b+1,c-1,d),calc(a+3,b,c-1,d)));
 37     //四带一
 38     tmp=my_min(tmp,my_min(calc(a-2,b,c,d-1),calc(a,b-1,c,d-1))+1);
 39     //四带二
 40     tmp=my_min(tmp,my_min(calc(a,b-2,c,d-1),calc(a,b,c,d-2))+1);
 41     //三带一
 42     tmp=my_min(tmp,my_min(calc(a-1,b,c-1,d),calc(a,b-1,c-1,d))+1);
 43     return f[a][b][c][d]=tmp;
 44 }
 45 void dfs(int x)
 46 {
 47     if(x>=ans) return ;
 48     bool f=true;
 49     int cnt;
 50     //暴力出顺子
 51     for(res k=1 ; k<=3 ; k++)
 52         for(res i=3 ; i<=14 ; i++)
 53         {
 54             f=true;
 55             if(k==1)      cnt=5;
 56             else if(k==2) cnt=3;
 57             else          cnt=2;
 58             while(f&&i+cnt-1<=14)
 59             {
 60                 for(res j=1 ; j<=cnt ; j++)
 61                     if(a[i+j-1]<k) {
 62                         f=false; break;
 63                     }
 64                 if(!f)  continue;
 65                 for(res j=1 ; j<=cnt ; j++)
 66                     a[i+j-1]-=k;
 67                 dfs(x+1);
 68                 for(res j=1 ; j<=cnt ; j++)
 69                     a[i+j-1]+=k;
 70                 cnt++;//看有没有更长的顺子
 71             }
 72         }
 73     c[1]=c[2]=c[3]=c[4]=0;
 74     for(res i=3 ; i<=15 ; i++) c[a[i]]++;
 75     if(a[0]==2) ans=my_min(ans,x+calc(c[1],c[2],c[3],c[4])+1);
 76     //王炸
 77     ans=my_min(ans,x+calc(a[0]+c[1],c[2],c[3],c[4]));
 78 }
 79
 80 int main()
 81 {
 82     T=read(); n=read();
 83     memset(f,-1,sizeof(f));
 84     while(T--)
 85     {
 86         memset(a,0,sizeof(a));
 87         ans=n;
 88         for(res i=1 ; i<=n ; i++)
 89         {
 90             int x=read(),y=read();
 91             if(x==0)      a[0]++;
 92             else if(x>=3) a[x]++;
 93             else if(x==1) a[14]++;
 94             else if(x==2) a[15]++;
 95         }
 96         dfs(0);
 97         printf("%d\n",ans);
 98     }
 99
100     return 0;
101 }

View Code

转载于:https://www.cnblogs.com/wmq12138/p/10349618.html

P2540 斗地主增强版相关推荐

  1. 将表里的数据批量生成INSERT语句的存储过程 增强版

    原文:将表里的数据批量生成INSERT语句的存储过程 增强版 将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的 ...

  2. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  3. Facebook增强版LASER开源:零样本迁移学习,支持93种语言

    来源| Facebook AI 研究院 译者 | Linstancy 责编 | 琥珀 出品 | AI 科技大本营(ID:rgznai100) [导语]为了加速自然语言处理 (NLP) 在更多语言上实现 ...

  4. P1276 校门外的树(增强版)(线段树)(校门三部曲)难度⭐⭐⭐

    校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...

  5. QUARK的增强版C-QUARK问世,有效提升蛋白质结构从头预测精度

    2021年8月18日,密西根大学张阳教授团队在Nature Communications上发表论文"Improving fragment-based ab initio protein st ...

  6. 小程序 a标签_微慕WordPress小程序增强版V2.0新版上线

    2020年7月10日,我进行了一场微信小程序的直播,直播主题:微慕小程序增强版v2.0版新功能说明, 在直播里对微慕增强版v2.0版全面阐述了新版本增加的功能. 微慕小程序增强版定位是使用wordpr ...

  7. 字符串位加密 php,PHP字符串加密增强版

    这篇文章介绍的内容是关于PHP字符串加密增强版,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下为了增加数据的安全性 避免相同字符多次加密得到结果是一致的 可以设置密文有效期 下面列举了一 ...

  8. 将表里的数据批量生成INSERT语句的存储过程 继续增强版

    文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧 ...

  9. 阿里云云盾-风险识别-增强版模式发布

    信息摘要: 注册风险识别与营销风险识别新增"增强版"模式,引入设备风险SDK能力,基于端检测及设备指纹,强力提升移动端风险防控能力. 适用客户: 有移动APP类企业 版本/规格功能 ...

  10. 服务器安全狗V4.1增强版 新增修复多项功能

    2019独角兽企业重金招聘Python工程师标准>>> 服务器安全狗V4.1增强版发布咯,用户朋友们可直接在线升级或到官网下载安装使用. 2014年4月1日发布,服务狗主要针对以下几 ...

最新文章

  1. R构建加权最小二乘回归模型(Weighted Least Squares Regression)
  2. python时间序列因果检验_用python做时间序列预测八:Granger causality test(格兰杰因果检验)...
  3. eclipse 和myEclipse 项目导入
  4. scorecardpy库的使用简介
  5. OpenCV基本步骤(初步学习)
  6. 【AI不惑境】学习率和batchsize如何影响模型的性能?
  7. 智能文案app_智能营销,用实力说话!按效果付费!
  8. xml 和android脚本之家,AndroidManifest.xml配置文件解析_Android_脚本之家
  9. Flutter异步编程async与await的基本使用
  10. WLC-生成CSR操作
  11. jquery 如何控制滚动条每次向下滚动300px
  12. win10如何截屏_6个Win10系统使用小技巧,对你一定有用!
  13. 考研政治——马克思主义唯物论之物质观
  14. POJ:3276-Face The Right Way(线性反转)
  15. 当租房成为一种生活方式
  16. 如何构建VoIP来是实现电话诈骗之——Asterisk的设置
  17. 一个又离不开的软件:图形化远程控制APP向日葵
  18. bp神经网络原理 实现过程,bp神经网络的应用案例
  19. 【云原生】Docker Compose 构建 Jenkins
  20. 桥牌新手应该看的几本书

热门文章

  1. 理解 Delphi 的类(十一) - 深入类中的方法[12] - 消息方法
  2. POJ 1398 Complete the sequence! ★ (差分)
  3. DataMining with Sql 2005
  4. JavaScript学习笔记(八)
  5. CCF——游戏(2017-12)
  6. python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密
  7. iOS开发之单元测试
  8. Phoenix Tips (13) 统计收集
  9. Android中为APP创建快捷方式的原理(自己的理解)
  10. 在Eclipse上搭建Cocos2d-x的Android开发环境