毫无意义的一道题。

用pai[i]表示某种点数的牌的剩余量,used[i]表示单,对,三,四的出牌数,大力分类讨论,大力dfs即可。。。真奇葩。。。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int T,n,ans,pai[20],used[6];
void dfs(int kth,int v) {
if(kth>14) {
int nxt=v,a=used[1],b=used[2],c=used[3],d=used[4];
if(d>=(a>>1)) nxt-=a-(a&1),d-=a>>1,a&=1;
else nxt-=d<<1,a-=d<<1,d=0;
if(d>=(b>>1)) nxt-=b-(b&1),d-=b>>1,b&=1;
else nxt-=d<<1,b-=d<<1,d=0;
if(d>=b) nxt-=b,d-=b,b=0;
if(c>=a) nxt-=a,c-=a,a=0;
else nxt-=c,a-=c,c=0;
if(c>=b) nxt-=b,c-=b,b=0;
else nxt-=c,b-=c,c=0;
ans=min(ans,nxt);return;
}
if(!pai[kth]) {dfs(kth+1,v);return;}
int now=-1;
if(kth>=3) {
for(int i=kth;i<=14;i++) {
if(pai[i]<3) break;
now=i;pai[i]-=3;
if(i-kth+1>=2) dfs(kth,v+1);
}
for(int i=kth;i<=now;i++) pai[i]+=3;
now=-1;
for(int i=kth;i<=14;i++) {
if(pai[i]<2) break;
now=i;pai[i]-=2;
if(i-kth+1>=3) dfs(kth,v+1);
}
for(int i=kth;i<=now;i++) pai[i]+=2;
now=-1;
for(int i=kth;i<=14;i++) {
if(!pai[i]) break;
now=i;
pai[i]--;
if(i-kth+1>=5) dfs(kth,v+1);
}
for(int i=kth;i<=now;i++) pai[i]++;
}
if(pai[kth]==4) {
pai[kth]-=4;
used[4]++;dfs(kth+1,v+1);used[4]--;
used[3]++,used[1]++,dfs(kth+1,v+2);used[3]--,used[1]--;
used[2]+=2;dfs(kth+1,v+2);used[2]-=2;
pai[kth]+=4;
}
else if(pai[kth]==3) {
pai[kth]-=3;
used[3]++;dfs(kth+1,v+1);used[3]--;
used[2]++,used[1]++,dfs(kth+1,v+2),used[2]--,used[1]--;
pai[kth]+=3;
}
else if(pai[kth]==2) {pai[kth]-=2;used[2]++;dfs(kth+1,v+1);used[2]--;pai[kth]+=2;}
else if(pai[kth]==1) {pai[kth]--;used[1]++;dfs(kth+1,v+1);used[1]--;pai[kth]++;}
}
int main() {
scanf("%d%d",&T,&n);
while(T--) {
ans=9999999;
memset(pai,0,sizeof pai);memset(used,0,sizeof used);
for(int i=1,a,b;i<=n;i++) {scanf("%d%d",&a,&b);if(a==0) pai[b-1]++;else if(a==1) pai[14]++;else pai[a]++;}
if(pai[0]&&pai[1]) pai[0]--,pai[1]--,dfs(2,1),pai[0]++,pai[1]++,dfs(0,0);
else dfs(0,0);
printf("%d\n",ans);
}
}

[NOIPlus]斗地主的更多相关文章

  1. NOIP2015斗地主[DFS 贪心]

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

  2. Android斗地主棋牌游戏牌桌实现源码下载

    本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...

  3. Android开源益智游戏“斗地主”单机版源代码

     Android开源益智游戏"斗地主"单机版源代码 这是一个网上流传的Android开源斗地主单机版项目,运行结果如图: 项目源代码导入到Eclipse后可直接运行,我把ecl ...

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

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

  5. Java基础之如何解决斗地主问题

        难的是逻辑的分析,把逻辑转化成代码是一种能力,这种能力需要多练习总结.     多多指教,共同进步. 问题: 要求实现斗地主游戏发牌过程,打印三个玩家的牌和底牌.在不看底牌的情况下,统计出三个 ...

  6. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  7. 斗地主(Noip2015Day1T3)

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

  8. BZOJ 4325: NOIP2015 斗地主

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

  9. UOJ147 斗地主

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

随机推荐

  1. 训练1-C

    妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input 输入含有一些数据组,每组数据包括菜种( ...

  2. --without-v4l ,make clean, 重新make即可。

    --without-v4l ,make clean, 重新make 2011-02-27 17:38 Error: X11 support required for GUI compilation

  3. Python - def 函数

    1.def 函数 如果我们用代码实现了一个小功能,但想要在程序代码中重复使用,不能在代码中到处粘贴这些代码,因为这样做违反了软件工程中 DRY原则. Python 提供了 函数功能,可以将我们这部分功 ...

  4. Java中发邮件的6种方法

    1.官方标准JavaMail Sun(Oracle)官方标准,功能强大,用起来比较繁琐. 官方资料:http://www.oracle.com/technetwork/java/javamail/in ...

  5. 具体解释Redis源代码中的部分高速排序算法(pqsort.c)

    看标题.你可能会疑惑:咦?你这家伙.怎么不解说完整的快排,仅仅讲一部分快排---.- 哎,冤枉. "部分快排"是算法的名字.实际上本文相当具体呢.本文差点儿与普通快排无异.看懂了本 ...

  6. SDUT 1225-编辑距离(串型dp)

    编辑距离 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 如果字符串的基本操作仅为:删除一个字符.插入一个字符和将一个字符改动 ...

  7. [ACM] POJ 2154 Color (Polya计数优化,欧拉函数)

    Color Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7630   Accepted: 2507 Description ...

  8. sql查询语句中的乱码 -- 前面加N

    直接运行sql出出现乱码,在中文字符前加N就能够正常显示了.N的含义就是用nvarchar格式显示.

  9. jsp不通过form和Ajax提交

    在页面里面我们一般都通过form表单和Ajax向后台提交请求,但是我如今页面没有form表单,也不想通过ajax异步提交. 解决方式例如以下:location.href="${rootPat ...

  10. ES内存持续上升问题定位

      https://discuss.elastic.co/t/memory-usage-of-the-machine-with-es-is-continuously-increasing/23537/ ...