NOIP2015 斗地主(搜索+剪枝)
4325: NOIP2015 斗地主
Time Limit: 30 Sec Memory Limit: 1024 MB
Submit: 270 Solved: 192
[Submit][Status][Discuss]
Description
牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A到K加上大小王的共54张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由n张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以将它们打光。请你帮他解决这个问题。需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:
Input
第一行包含用空格隔开的2个正整数T,N,表示手牌的组数以及每组手牌的张数。
Output
共T行,每行一个整数,表示打光第T组手牌的最少次数。
Sample Input
7 4
8 4
9 1
10 4
11 1
5 1
1 4
1 1
Sample Output
HINT
共有1组手牌,包含8张牌:方片7,方片8,黑桃9,方片10,黑桃J,黑桃5,方
【思路】
搜索+剪枝
忽略花色,统计每种码数出现次数方便出牌。
每次都先出顺子,对于手中剩下的牌我们贪心地将剩下的组合牌需要打的次数计算出来,然后更新ans以剪枝。
双王算作对牌。顺排不包括2和双王。
【代码】
#include<cstdio>
#include<cstring>
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; const int N = ; int a[N],c[N];
int n,T,ans; int Qans() {
memset(c,,sizeof(c));
FOR(i,,) c[a[i]]++;
int tot=; //tot带牌
while(c[]&&c[]>) c[]--,c[]-=,tot++;
while(c[]&&c[]>) c[]--,c[]-=,tot++;
while(c[]&&c[]) c[]--,c[]--,tot++;
while(c[]&&c[]) c[]--,c[]--,tot++;
while(c[]&&c[]) c[]--,c[]--,tot++;
return tot+c[]+c[]+c[]+c[]; //带牌+三张 对子 单张
} void dfs(int now) {
if(now>=ans) return ;
int tmp=Qans();
if(now+tmp<ans) ans=now+tmp;
FOR(i,,) { //三顺子
int j=i;
while(a[j]>=) j++;
if(j-i>=) {
FOR(j2,i+,j-) {
FOR(k,i,j2) a[k]-=;
dfs(now+);
FOR(k,i,j2) a[k]+=;
}
}
}
FOR(i,,) { //双顺子
int j=i;
while(a[j]>=) j++;
if(j-i>=) {
FOR(j2,i+,j-) {
FOR(k,i,j2) a[k]-=;
dfs(now+);
FOR(k,i,j2) a[k]+=;
}
}
}
FOR(i,,) { //单顺子
int j=i;
while(a[j]>=) j++;
if(j-i>=) {
FOR(j2,i+,j-) {
FOR(k,i,j2) a[k]--;
dfs(now+);
FOR(k,i,j2) a[k]++;
}
}
}
} int main() {
//freopen("in.in","r",stdin);
//freopen("out.out","w",stdout);
scanf("%d%d",&T,&n);
while(T--) {
memset(a,,sizeof(a));
int x,y;
FOR(i,,n) {
scanf("%d%d",&x,&y);
if(x==) x=; else if(x) x--;
a[x]++;
}
ans=1e9;
dfs();
printf("%d\n",ans);
}
return ;
}
NOIP2015 斗地主(搜索+剪枝)的更多相关文章
- 【BZOJ4325】NOIP2015 斗地主 搜索+剪枝
[BZOJ4325]NOIP2015 斗地主 Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗 ...
- 【BZOJ4325】NOIP2015 斗地主 搜索+贪心
这个东西考试的时候一眼以为状压就压炸了考试又了一下午.....最后我打出来发现后几个点10min都过不去,我大概算了一下,可能是吧.......最后一脸懵逼的我去怂了正解,我们发现只要确定了顺子就可以 ...
- LOJ2422 NOIP2015 斗地主 【搜索+贪心】*
LOJ2422 NOIP2015 斗地主 LINK 题目大意很简单,就是问你斗地主的一分手牌最少多少次出完 然后我们发现对于一种手牌状态,不考虑顺子的情况是可以贪心做掉的 然后我们直接枚举一下顺子出牌 ...
- NOIP2015斗地主题解 7.30考试
问题 B: NOIP2015 斗地主 时间限制: 3 Sec 内存限制: 1024 MB 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共 ...
- NOIP2015斗地主[DFS 贪心]
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- BZOJ 4325: NOIP2015 斗地主
4325: NOIP2015 斗地主 Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 684 Solved: 456[Submit][Status] ...
- [补档][NOIP2015] 斗地主
[NOIP2015] 斗地主 题目 传送门:http://cogs.pro/cogs/problem/problem.php?pid=2106 INPUT 第一行包含用空格隔开的2个正整数Tn,表示手 ...
- 2106. [NOIP2015] 斗地主
2106. [NOIP2015] 斗地主 ★★★☆ 输入文件:landlords.in 输出文件:landlords.out 简单对比 时间限制:2 s 内存限制:1025 M ...
- hdu 5469 Antonidas(树的分治+字符串hashOR搜索+剪枝)
题目链接:hdu 5469 Antonidas 题意: 给你一颗树,每个节点有一个字符,现在给你一个字符串S,问你是否能在树上找到两个节点u,v,使得u到v的最短路径构成的字符串恰好为S. 题解: 这 ...
随机推荐
- js replace in multi-line string
.replace(/{id}/g, '_' + counter);
- vue-cli + webpack
vue-cli + webpack 关于vue.js vue.js是一套构建用户界面的 轻型的渐进式前端框架.它的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.使用vue可以给你 ...
- <二> SQL 基础
left (outer) join 结果集包含连接表的匹配行,也包括左连接表的所有行. select a.a, a.b, a.c, b.c b.d b.f from a left out join b ...
- cmd命令查看端口和进程信息
在我们进行WEB开发时,往往会遇到socket连接到服务器出现无法响应的问题,归根结底就是网络通讯问题,或者端口未开启的问题,下面总结了一下找出原因的方法 1 看与服务器的连接:ping ip地址
- 转 scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最 ...
- jquery upgrade
http://www.ifanybug.com/article/00125 http://zhidao.baidu.com/question/69399476.html http://www.tmtp ...
- Ubuntu下使用ap-hotspot出现“Another process is already running"问题的解决方案
参考Problem with ap-hotspot 问题描述: This is the message displayed in my terminal screen when I typed sud ...
- MySQL JDBC的setFetchSize
MySQL JDBC的setFetchSize http://uuhorse.iteye.com/blog/2163582 http://blog.sina.com.cn/s/blog_6706203 ...
- 服务器部署_linuix下 一台nginx 多域名
近日朋友要我帮他调服务器, 一. 初步需求如下: 1. 一台服务器下要放三个应用,对应三个域名:www.aaa.com,www.bbb.com,www.ccc.com. 2. 其中后两个应用也要可以用 ...
- Dagger 2: Step To Step
文/iamwent(简书作者)原文链接:http://www.jianshu.com/p/7505d92d7748著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 假设你已经了解 依赖注 ...