【uoj147】NOIP2015—斗地主
http://uoj.ac/problem/147 (题目链接)
题意
打牌。。。
Solution
其实很简单的搜索,当年还是太年轻了。稍微想一想,顺子肯定是要先打掉的,因为顺子所包含的牌最多,所以我们可以以打出了多少张顺子为状态进行搜索,每一种状态,贪心去计算一下对于当前状态还需要打多少次才能将牌打完,不断更新答案即可。
代码
// uoj147
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<queue>
#define MOD 1000000007
#define inf 2147483640
#define LL long long
#define free(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
using namespace std; const int maxn=30;
int c[5],a[maxn],n,T,ans; int cal() {
memset(c,0,sizeof(c));
for (int i=0;i<=13;i++) c[a[i]]++;
int tot=0;
while (c[4] && c[2]>1) c[4]--,c[2]-=2,tot++;
while (c[4] && c[1]>1) c[4]--,c[1]-=2,tot++;
while (c[4] && c[2]) c[4]--,c[2]--,tot++;
while (c[3] && c[2]) c[3]--,c[2]--,tot++;
while (c[3] && c[1]) c[3]--,c[1]--,tot++;
return tot+c[1]+c[2]+c[3]+c[4];
}
void dfs(int x) {
if (x>=ans) return;
int tmp=cal();
ans=min(ans,tmp+x);
for (int i=2;i<=13;i++) {
int j=i;
while (a[j]>=3) j++;
if (j-i>=2) {
for (int k=i+1;k<=j-1;k++) {
for (int l=i;l<=k;l++) a[l]-=3;
dfs(x+1);
for (int l=i;l<=k;l++) a[l]+=3;
}
}
}
for (int i=2;i<=13;i++) {
int j=i;
while (a[j]>=2) j++;
if (j-i>=3) {
for (int k=i+2;k<=j-1;k++) {
for (int l=i;l<=k;l++) a[l]-=2;
dfs(x+1);
for (int l=i;l<=k;l++) a[l]+=2;
}
}
}
for (int i=2;i<=13;i++) {
int j=i;
while (a[j]>=1) j++;
if (j-i>=5) {
for (int k=i+4;k<=j-1;k++) {
for (int l=i;l<=k;l++) a[l]--;
dfs(x+1);
for (int l=i;l<=k;l++) a[l]++;
}
}
}
}
int main() {
int T;scanf("%d%d",&T,&n);
while (T--) {
memset(a,0,sizeof(a));
for (int x,y,i=1;i<=n;i++) {
scanf("%d%d",&x,&y);
if (x==1) x=13;
else if (x) x--;
a[x]++;
}
ans=n;
dfs(0);
printf("%d\n",ans);
}
return 0;
}
【uoj147】NOIP2015—斗地主的更多相关文章
- 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 斗地主(搜索+剪枝)
4325: NOIP2015 斗地主 Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 270 Solved: 192[Submit][Status] ...
- [补档][NOIP2015] 斗地主
[NOIP2015] 斗地主 题目 传送门:http://cogs.pro/cogs/problem/problem.php?pid=2106 INPUT 第一行包含用空格隔开的2个正整数Tn,表示手 ...
- LOJ2422 NOIP2015 斗地主 【搜索+贪心】*
LOJ2422 NOIP2015 斗地主 LINK 题目大意很简单,就是问你斗地主的一分手牌最少多少次出完 然后我们发现对于一种手牌状态,不考虑顺子的情况是可以贪心做掉的 然后我们直接枚举一下顺子出牌 ...
- 【BZOJ4325】NOIP2015 斗地主 搜索+剪枝
[BZOJ4325]NOIP2015 斗地主 Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗 ...
- 2106. [NOIP2015] 斗地主
2106. [NOIP2015] 斗地主 ★★★☆ 输入文件:landlords.in 输出文件:landlords.out 简单对比 时间限制:2 s 内存限制:1025 M ...
- NOIP2015斗地主题解 7.30考试
问题 B: NOIP2015 斗地主 时间限制: 3 Sec 内存限制: 1024 MB 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共 ...
- [NOIP2015] 斗地主(搜索)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
随机推荐
- DEDECMS之一 安装配置
一.织梦安装 1.建好数据库.数据库用户名密码以及权限 2.上传代码到服务器,根目录赋予所有权限 3.打开网址,一步步安装即可 二.配置 1.删除安装目录下的所有文件 2.系统 系统设置:配置网站基本 ...
- JavaScript的闭包和内存泄漏问题
闭包 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html JavaScript中必须提到的功能最强大的抽象 ...
- IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表
浏览器兼容问题一直是前段开发工程师比较头痛的问题,熟悉了里面的规则也就变得简单了,这里有一份资料可以分享给大家,大家平时开发过程中遵循这个规律的话,会变得轻松多了: 各浏览器CSS hack兼容表: ...
- 【MVVMLight小记】一.快速搭建一个基于MVVMLight的silverlight小程序
写了篇MVVM小记http://www.cnblogs.com/whosedream/p/mvvmnote1.html,说好要写点MVVMLight的东西,所以接着写,以便和大家共勉. 我假设你已经有 ...
- 深入理解计算机系统(1.2)---hello world的程序是如何运行的
在写本章的内容之前,LZ先做个小广告.其实也不算是什么广告,就是LZ为了和各位猿友交流方便,另外也确实有个别猿友留言或者在博客里发短消息给LZ要联系方式.因此LZ斗胆建立了一个有关<深入理解计算 ...
- 天龙客户端的ResourceManager
今天培训的时候,Leader针对项目结构讲了很多分层架构的思想,思路,对我而言有很大的助益,学会了将需求分层,或者说先设计出各个层次,然后有需求后落实到对应的层次上,尤其对于刚开始的架构设计阶段,能把 ...
- 史密斯(smith)圆图讲解
不管多么经典的射频教程,为什么都做成黑白的呢?让想理解史密斯原图的同学一脸懵逼. 这是什么东东? 今天解答三个问题: 1.是什么? 2.为什么? 3.干什么? 1.是什么? 该图表是由菲利普·史密斯( ...
- CSS3属性border-radius绘制多种多样的图形
border-radius,国内翻译成圆角,你可能以为这个属性就是用来画圆角,没错,但是除此之外,它还可以做点别的事情.radius其实指的是边框所在圆的半径,这个CSS3属性不仅能够创建圆角,还可以 ...
- 42-stat 显示文件的信息
显示文件的信息 stat [options] [file-list] 参数 file-list指定stat所显示的一个或多个文件的路径名 选项 -f 显示文件系 ...
- C++之父Bjarne Stroustrup提供的关于异常处理的建议
节选自<The C++ Programming Language> ——C++之父Bjarne Stroustrup 1. Don’t use exceptions wh ...