题目链接

思路:

大模拟,爆搜30分。

加一个贪心就能过。

单张和对子不用打,留到最后把散牌都打掉,无论怎么都会出现只剩单张和对子的情况,这种情况只能打散牌。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define R register
using namespace std;
const int N=50;
int n,t,a[N],b[N],flag[N],ans,ton[N],tot;
inline void dfs(R int cnt,R int use){if(cnt>=ans)return;if(use==n){ans=min(ans,cnt);return;}R int lst=0;for(R int i=3;i<=14;++i){if(!ton[i])lst=0;else{++lst;if(lst>=5){for(R int k=i-lst+1;k<=i;++k)--ton[k];dfs(cnt+1,use+lst);for(R int k=i-lst+1;k<=i;++k)++ton[k];}}}lst=0;for(R int i=3;i<=14;++i){if(ton[i]<2)lst=0;else{++lst;if(lst>=3){for(R int k=i-lst+1;k<=i;++k)ton[k]-=2;dfs(cnt+1,use+lst*2);for(R int k=i-lst+1;k<=i;++k)ton[k]+=2;}}}lst=0;for(R int i=3;i<=14;i++){if(ton[i]<3)lst=0;else{++lst;if(lst>=2){for(R int k=i-lst+1;k<=i;++k)ton[k]-=3;dfs(cnt+1,use+lst*3);for(R int k=i-lst+1;k<=i;++k)ton[k]+=3;}}}for(R int i=3;i<=15;++i){if(ton[i]==4){ton[i]-=4;for(R int j=3;j<=15;++j){for(R int k=1;k<j;++k){if(ton[j]>=2&&ton[k]>=2){ton[j]-=2;ton[k]-=2;dfs(cnt+1,use+8);//四带二对ton[j]+=2;ton[k]+=2;}if(ton[j]>=1&&ton[k]>=1){--ton[j];--ton[k];dfs(cnt+1,use+6);//四带二单++ton[j];++ton[k];}}if(ton[j]>=2){ton[j]-=2;dfs(cnt+1,use+6);//四带二 同ton[j]+=2;}}ton[i]+=4;ton[i]-=4;dfs(cnt+1,use+4);//炸弹ton[i]+=4;}if(ton[i]>=3){ton[i]-=3;for(R int k=3;k<=15;++k){if(ton[k]&&i!=k){--ton[k];dfs(cnt+1,use+4);//三带一++ton[k];}if(ton[k]>=2){ton[k]-=2;dfs(cnt+1,use+5);//三带二ton[k]+=2;}}ton[i]+=3;ton[i]-=3;dfs(cnt+1,use+3);//三张ton[i]+=3;}}for(R int i=3;i<=15;++i)if(ton[i]>=1)++cnt;ans=min(ans,cnt);
}
int main(){scanf("%d%d",&t,&n);while(t--){ans=0x3f3f3f3f;memset(ton,0,sizeof(ton));for(R int i=1;i<=n;i++){scanf("%d%d",&a[i],&b[i]);if(a[i]==1)a[i]=14;if(a[i]==2)a[i]=15;if(a[i]==0)a[i]=16;ton[a[i]]++;}if(ton[16]){//火箭R int k=ton[16];ton[16]=0;dfs(1,k);}elsedfs(0,0);printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/sky-zxz/p/9897038.html

【NOIP2015】斗地主 题解相关推荐

  1. 2106. [NOIP2015] 斗地主

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

  2. [NOIP2015] 斗地主

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

  3. [杂言] GoodBye,2016

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

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

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

  5. noip2017考前整理(未完)

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

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

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

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

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

  8. [LOJ2422]【NOIP2015】斗地主

    大名鼎鼎的NOIP2015D1T3 题意: 由于一些众所周知的原因,没有完整题面-- 给你一副斗地主的手牌(牌数<=23),问最少要几次能出完: 包含双王,没有癞子,连对要三连对以上,可以直接出 ...

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

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

最新文章

  1. 梯度优化算法Adam
  2. 文件编码方式批量转换工具
  3. Redis实现之数据库(三)
  4. java 画图保存图片_将绘图保存到图像文件,而不是使用Matplotlib显示它
  5. mysql内外链接图_图解MySQL 内连接、外连接、左连接、右连接、全连接
  6. 【推荐】飞鸽传书2013官方下载
  7. mui组件 a 锚点定位(Demo案例演示)- 代码篇
  8. Citrix XenApp 5.0 Uninstall
  9. sklearn K折(KFold)交叉验证案例,展开细节代码与cross_validate简写
  10. 吴恩达机器学习(十三)异常检测(高斯分布)
  11. java的内部字符编码
  12. github的使用 sourceTree
  13. extmail mysql数据库 重启_Extmail邮件服务器部署
  14. MATLAB智能算法
  15. 微信小程序常用路由跳转方法
  16. 移动地盘仿真平台搭建
  17. python警示:WARNING: Ignoring invalid distribution
  18. html创建关联程序,如何在控制面板中创建电子邮件默认程序关联
  19. SpringBoot2后端项目-验证码图片生成
  20. 存储过程 debug

热门文章

  1. 初探JavaScript(一)——也谈元素节点、属性节点、文本节点
  2. spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
  3. 深入Mysql,SqlServer,Oracle主键自动增长的设置详解
  4. 机房收费系统重构之存储过程的使用
  5. 23种设计模式及其对应实例-转
  6. java基本数据类型转换
  7. go使用beedb库进行ORM开发
  8. golang中的strings.SplitAfter
  9. 汇编语言--CMOS RAM芯片
  10. C++ Virtual详解