基础算法(搜索):NOIP 2015 斗地主
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,方
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=;
int cnt[N];
int DFS(int d=){
int flag=,ret=;
for(int i=;i<=;i++)
if(cnt[i])flag=;
if(!flag)return ;
for(int i=;i<=;i++){
flag=;
for(int j=i;j<=i+;j++)if(!cnt[j])flag=;
if(!flag)continue;
for(int j=i;j<=i+;j++)cnt[j]-=;
for(int j=i+;j<=;j++){
if(cnt[j]){cnt[j]-=;ret=min(ret,DFS()+);}
else{for(int k=j-;k>=i;k--)cnt[k]+=;break;}
}
} for(int i=;i<=;i++){
flag=;
for(int j=i;j<=i+;j++)if(cnt[j]<)flag=;
if(!flag)continue;
for(int j=i;j<=i+;j++)cnt[j]-=;
for(int j=i+;j<=;j++){
if(cnt[j]>=){cnt[j]-=;ret=min(ret,DFS()+);}
else{for(int k=j-;k>=i;k--)cnt[k]+=;break;}
}
} for(int i=;i<=;i++){
flag=;
for(int j=i;j<=i;j++)if(cnt[j]<)flag=;
if(!flag)continue;
for(int j=i;j<=i;j++)cnt[j]-=;
for(int j=i+;j<=;j++){
if(cnt[j]>=){cnt[j]-=;ret=min(ret,DFS()+);}
else{for(int k=j-;k>=i;k--)cnt[k]+=;break;}
}
} //三带一 三带二
for(int i=;i<=;i++){
if(cnt[i]<)continue;
cnt[i]-=;
for(int j=;j<=;j++){
if(i==j)continue;
if(cnt[j]>=){cnt[j]-=;ret=min(ret,DFS()+);cnt[j]+=;}
if(cnt[j]){cnt[j]-=;ret=min(ret,DFS()+);cnt[j]+=;}
}
cnt[i]+=;
} for(int i=;i<=;i++){
if(cnt[i]<)continue;
cnt[i]-=;
for(int j=;j<=;j++)if(i!=j&&cnt[j]>)
for(int k=j+;k<=;k++)if(i!=k&&cnt[k]>)
{cnt[j]-=;cnt[k]-=;ret=min(ret,DFS()+);cnt[j]+=;cnt[k]+=;} for(int j=;j<=;j++)if(i!=j&&cnt[j])
for(int k=j+;k<=;k++)if(i!=k&&cnt[k])
{cnt[j]-=;cnt[k]-=;ret=min(ret,DFS()+);cnt[j]+=;cnt[k]+=;}
cnt[i]+=;
}
flag=;
for(int i=;i<=;i++)if(cnt[i])flag+=;
return min(ret,flag);
}
int T,n;
int main(){
//freopen("landlords.in","r",stdin);
//freopen("landlords.out","w",stdout);
scanf("%d%d",&T,&n);
while(T--){
memset(cnt,,sizeof(cnt));
for(int i=,a,b;i<=n;i++){
scanf("%d%d",&a,&b);
cnt[a]+=;
}
cnt[]=cnt[];cnt[]=;
printf("%d\n",DFS());
}
return ;
}
基础算法(搜索):NOIP 2015 斗地主的更多相关文章
- Luogu 2668 NOIP 2015 斗地主(搜索,动态规划)
Luogu 2668 NOIP 2015 斗地主(搜索,动态规划) Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来 ...
- 洛谷 P2668 & P2540 [ noip 2015 ] 斗地主 —— 搜索+贪心
题目:https://www.luogu.org/problemnew/show/P2668 https://www.luogu.org/problemnew/show/P2540 首先,如果没有 ...
- [NOIp 2015]斗地主
Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3& ...
- [BZOJ 4325][NOIP 2015] 斗地主
一道防AK好题 4325: NOIP2015 斗地主 Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 820 Solved: 560[Submit] ...
- [NOIP 2015] 斗地主 landlord
想起几个月之前的 noip2015-只会瞎搞-这道题骗了 30 分.T T 题目 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的 A 到 K 加上大小王的共 54 张牌 ...
- noip 2015 斗地主 大爆搜!!!
反正肯定是大模拟 但是每一个可以出的牌都搜一定不是最优的 考虑最特殊的出牌方案:顺子(单,对,三) 每一种方案再加上暴力贪心打出剩下的牌的步数 #include<cstdio> #incl ...
- 算法与数据结构基础 - 广度优先搜索(BFS)
BFS基础 广度优先搜索(Breadth First Search)用于按离始节点距离.由近到远渐次访问图的节点,可视化BFS 通常使用队列(queue)结构模拟BFS过程,关于queue见:算法与数 ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- 0算法基础学算法 搜索篇第二讲 BFS广度优先搜索的思想
dfs前置知识: 递归链接:0基础算法基础学算法 第六弹 递归 - 球君 - 博客园 (cnblogs.com) dfs深度优先搜索:0基础学算法 搜索篇第一讲 深度优先搜索 - 球君 - 博客园 ( ...
随机推荐
- WKWebView无法(通过URL schemes)跳转到其他App
Custom scheme URL 在WKWebView中默认是不支持的 (但Safari可以). 我们可以通过NSError来进行一些处理从而使得程序可以正常跳转: func webView(web ...
- IOS开发之KVC与KVO简述
KVC:Key-Value Coding KVO:Key-Value Observing Person.m #import <Foundation/Foundation.h> @inter ...
- JSON.parse 函数应用 (复制备忘)
JSON.parse 函数 JSON.parse 函数 (JavaScript) 将 JavaScript 对象表示法 (JSON) 字符串转换为对象. 语法 JSON.parse(text [, r ...
- Codevs 1172 Hankson 的趣味题 2009年NOIP全国联赛提高组
1172 Hankson 的趣味题 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Hanks 博 ...
- jquery 中的 $("#id") 与 document.getElementById("id") 的区别
以前没注意过,认为jquery 中的 $("#air") 与 document.getElementById("air") 是一回事,指的是同一个东西.在今天写 ...
- Xshell配色方案
几个比较喜欢的Xshell配色方案,备份记录下 [Names] count=1 name0=SolarizedDark [SolarizedDark] text(bold)=839496 magent ...
- 前端工程的构建工具对比 Gulp vs Grunt
1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Maven.Node催生了一批自动化工 ...
- html5音频和视频相关属性和方法
方法 方法 描述 addTextTrack() 为音视频加入一个新的文本轨迹 canPlayType() 检查指定的音视频格式是否得到支持 load() 重新加载音视频标签 play() 播放音视频 ...
- C#中的反射 Assembly.Load() Assembly.LoadFrom()
一些关于C#反射的知识,估计也就最多达到使用API的程度,至于要深入了解,以现在的水平估计很难做到,所以下面此篇文章,以作为一个阶段的总结. 对于反射的总结,我想从以下几个方面展开,首先是反射程序集, ...
- C++版 Chip8游戏模拟器
很早就想写个FC模拟器,但真是一件艰难的事情.. 所以先写个Chip8模拟器,日后再继续研究FC模拟器. Chip8只有35条指令,属于RISC指令集,4k内存,2k显存,16个寄存器(其中15个通用 ...