NOIP 2015 [D1 T3]斗地主
2016-09-09 20:20
381 查看
【NOIP2015 Day1】斗地主
Time Limit:40000MS Memory Limit:1048576K
Total Submit:15 Accepted:11
Case Time Limit:2000MS
Description
牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A到K加上大小王的共54张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由n张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。
现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以把它们打光。请你帮助他解决这个问题。
需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:
Input
/*输入文件名为landlords.in。*/
第一行包含用空格隔开的2个正整数T,n,表示手牌的组数以及每组手牌的张数。
接下来T组数据,每组数据n行,每行一个非负整数对ai,bi,表示一张牌,其中ai表示牌的数码,bi表示牌的花色,中间用空格隔开。特别的,我们用1来表示数码A,11表示数码J,12表示数码Q,13表示数码K;黑桃、红心、梅花、方片分别用1-4来表示;小王的表示方法为0 1,大王的表示方法为0 2。
Output
/*输出文件名为landlords.out。*/
共T行,每行一个整数,表示打光第i组手牌的最少次数。
Sample Input
Sample Output
Hint
输入输出样例1说明:
共有1组手牌,包含8张牌:方片7,方片8,黑桃9,方片10,黑桃J,黑桃5,方片A,以及黑桃A。可以通过打单顺子(方片7,方片8,黑桃9,方片10,黑桃J),单张牌(黑桃5)以及对子牌(黑桃A以及方片A)在3次内打光。
数据规模与约定:
这题表面上看特别复杂,其实就是一个单纯的搜索题
一个有用的剪枝:先搜索所有的组合的情况,剩下的就一定是单张牌或者对牌并且没有任何组合方式,这个时候就不用搜下去了,直接将手中的牌全部出出去,但是要注意次数的判断
Time Limit:40000MS Memory Limit:1048576K
Total Submit:15 Accepted:11
Case Time Limit:2000MS
Description
牛牛最近迷上了一种叫斗地主的扑克游戏。斗地主是一种使用黑桃、红心、梅花、方片的A到K加上大小王的共54张牌来进行的扑克牌游戏。在斗地主中,牌的大小关系根据牌的数码表示如下:3<4<5<6<7<8<9<10<J<Q<K<A<2<小王<大王,而花色并不对牌的大小产生影响。每一局游戏中,一副手牌由n张牌组成。游戏者每次可以根据规定的牌型进行出牌,首先打光自己的手牌一方取得游戏的胜利。
现在,牛牛只想知道,对于自己的若干组手牌,分别最少需要多少次出牌可以把它们打光。请你帮助他解决这个问题。
需要注意的是,本题中游戏者每次可以出手的牌型与一般的斗地主相似而略有不同。具体规则如下:
Input
/*输入文件名为landlords.in。*/
第一行包含用空格隔开的2个正整数T,n,表示手牌的组数以及每组手牌的张数。
接下来T组数据,每组数据n行,每行一个非负整数对ai,bi,表示一张牌,其中ai表示牌的数码,bi表示牌的花色,中间用空格隔开。特别的,我们用1来表示数码A,11表示数码J,12表示数码Q,13表示数码K;黑桃、红心、梅花、方片分别用1-4来表示;小王的表示方法为0 1,大王的表示方法为0 2。
Output
/*输出文件名为landlords.out。*/
共T行,每行一个整数,表示打光第i组手牌的最少次数。
Sample Input
样例输入1: 1 8 7 4 8 4 9 1 10 4 11 1 5 1 1 4 1 1 样例输入2: 1 17 12 3 4 3 2 3 5 4 10 2 3 3 12 2 0 1 1 3 10 1 6 2 12 1 11 3 5 2 12 4 2 2 7 2
Sample Output
样例输出1: 3 样例输出2: 6
Hint
输入输出样例1说明:
共有1组手牌,包含8张牌:方片7,方片8,黑桃9,方片10,黑桃J,黑桃5,方片A,以及黑桃A。可以通过打单顺子(方片7,方片8,黑桃9,方片10,黑桃J),单张牌(黑桃5)以及对子牌(黑桃A以及方片A)在3次内打光。
数据规模与约定:
这题表面上看特别复杂,其实就是一个单纯的搜索题
一个有用的剪枝:先搜索所有的组合的情况,剩下的就一定是单张牌或者对牌并且没有任何组合方式,这个时候就不用搜下去了,直接将手中的牌全部出出去,但是要注意次数的判断
#include<cstdio> #include<iostream> #include<cstring> using namespace std; const int maxn=25,inf=1e9; int t,n,cnt[maxn],ans=inf; void dfs(int x,int step){ if(step>=ans)return ; if(x==0){ ans=min(ans,step); return ; } int i,j,k,sum=0; //单顺子 for(i=3;i<=10;i++){ for(j=i;j<=14&&cnt[j];j++){ cnt[j]--; if(j-i+1>=5)dfs(x-(j-i+1),step+1); } for(k=i;k<j;k++)cnt[k]++; } //双顺子 for(i=3;i<=12;i++){ for(j=i;j<=14&&cnt[j]>1;j++){ cnt[j]-=2; if(j-i+1>=3)dfs(x-2*(j-i+1),step+1); } for(k=i;k<j;k++)cnt[k]+=2; } //三顺子 for(i=3;i<=13;i++){ for(j=i;j<=14&&cnt[j]>2;j++){ cnt[j]-=3; if(j-i+1>=2)dfs(x-3*(j-i+1),step+1); } for(k=i;k<j;k++)cnt[k]+=3; } //三张牌 带0&1&2 for(i=2;i<=14;i++) if(cnt[i]>=3){ cnt[i]-=3; dfs(x-3,step+1); for(j=1;j<=14;j++) if(cnt[j]){ cnt[j]--; dfs(x-4,step+1); cnt[j]++; if(j>1&&cnt[j]>1){ cnt[j]-=2; dfs(x-5,step+1); cnt[j]+=2; } } cnt[i]+=3; } //四带2 for(i=2;i<=14;i++) if(cnt[i]==4){ cnt[i]=0; for(j=1;j<=14;j++) if(cnt[j]){ cnt[j]--; for(k=j;k<=14;k++) if(cnt[k]&&k!=1){ cnt[k]--; dfs(x-6,step+1); cnt[k]++; } cnt[j]++; } for(j=2;j<=14;j++) if(cnt[j]>1){ cnt[j]-=2; for(k=j;k<=14;k++) if(cnt[k]>1&&k!=j){ cnt[k]-=2; dfs(x-8,step+1); cnt[k]+=2; } cnt[j]+=2; } cnt[i]=4; } for(i=1;i<=14;i++) if(cnt[i])sum++; ans=min(ans,sum+step); } int main(){ scanf("%d%d",&t,&n); while(t--){ memset(cnt,0,sizeof(cnt));ans=inf; int i,x,y; for(i=1;i<=n;i++){ scanf("%d%d",&x,&y); if(x==1)x=14; if(x==0)x=1; cnt[x]++; } dfs(n,0); printf("%d\n",ans); } }
相关文章推荐
- NOIP 2015[D1 T3]斗地主(30分的特判)
- NOIP 2015 D1 T3 斗地主(特详细讲解)
- Noip2015 Day1 T3 斗地主(Dfs+Dp优化)
- 斗地主 (NOIP2015 Day1 T3)
- NOIP2015 Day 1 T3 斗地主
- 洛谷P2668 斗地主==codevs 4610 斗地主[NOIP 2015 day1 T3]
- 【NOIP2015 DAY1 T3 】斗地主(landlords)
- C++——NOIP2015提高组day1 t3——斗地主
- 【NOIP2015】洛谷2668 斗地主
- 【uoj147】NOIP2015—斗地主
- (noip 2015 斗地主)<搜索+贪心>
- bzoj 4325: NOIP2015 斗地主 dfs
- UOJ 147|NOIP 2015|斗地主|搜索|贪心
- NOIP 2015 斗地主
- [bzoj4325]NOIP2015 斗地主
- [NOIP2015] 斗地主
- NOIP2015 斗地主 解题报告(搜索)
- [NOIP2013]货车运输 D1 T3 最大生成树 LCA及其维护
- NOIP 2015 提高组 Day1 斗地主
- 4325. 【NOIP2015提高组Day1】斗地主