BZOJ4325【NOIp2015】斗地主 <搜索+贪心>
Problem
斗地主
Time Limit:
Memory Limit:
Description
牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的到加上大小王的共张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以将它们打光。请你帮他解决这个问题。需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:
Input
第一行包含用空格隔开的个正整数,表示手牌的组数以及每组手牌的张数。
接下来组数据,每组数据行,每行一个非负整数对,表示一张牌,其中表示牌的数码,表示牌的花色,中间用空格隔开。特别的,我们用1来表示数码A,表示数码,表示数码,表示数码;黑桃、红心、梅花、方片分别用来表示;小王的表示方法为,大王的表示方法为。
Output
共行,每行一个整数,表示打光第组手牌的最少次数。
Sample Input
1 | 1 8 |
Sample Output
1 | 3 |
HINT
共有组手牌,包含张牌:方片,方片,黑桃,方片,黑桃,黑桃,方片以及黑桃。可以通过打单顺子(方片,方片,黑桃,方片,黑桃),单张牌(黑桃)以及对子牌(黑桃以及方片)在次内打光。
,
标签:搜索
贪心
Solution
题面看起来挺吓人,做起来却比较容易,特别是代码复杂度不高(毕竟做了恶心的猪国杀作铺垫)。
发现确定顺子之后,其他所有牌都可以贪心取,从耗费牌数多的往牌数少的取。
用一个作大框架,在到每一层(即每次取一组顺子)的前后用贪心算出当前不再取顺子而直接贪心取的总次数,打擂即可。
Code
(貌似这个代码只能过原数据,加强版因为“有几个相同的王不能组成对子”这一,我的代码过不了,要加特判)
1 |
|