[NOIPlus]斗地主
毫无意义的一道题。
用pai[i]表示某种点数的牌的剩余量,used[i]表示单,对,三,四的出牌数,大力分类讨论,大力dfs即可。。。真奇葩。。。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int T,n,ans,pai[20],used[6];
void dfs(int kth,int v) {
if(kth>14) {
int nxt=v,a=used[1],b=used[2],c=used[3],d=used[4];
if(d>=(a>>1)) nxt-=a-(a&1),d-=a>>1,a&=1;
else nxt-=d<<1,a-=d<<1,d=0;
if(d>=(b>>1)) nxt-=b-(b&1),d-=b>>1,b&=1;
else nxt-=d<<1,b-=d<<1,d=0;
if(d>=b) nxt-=b,d-=b,b=0;
if(c>=a) nxt-=a,c-=a,a=0;
else nxt-=c,a-=c,c=0;
if(c>=b) nxt-=b,c-=b,b=0;
else nxt-=c,b-=c,c=0;
ans=min(ans,nxt);return;
}
if(!pai[kth]) {dfs(kth+1,v);return;}
int now=-1;
if(kth>=3) {
for(int i=kth;i<=14;i++) {
if(pai[i]<3) break;
now=i;pai[i]-=3;
if(i-kth+1>=2) dfs(kth,v+1);
}
for(int i=kth;i<=now;i++) pai[i]+=3;
now=-1;
for(int i=kth;i<=14;i++) {
if(pai[i]<2) break;
now=i;pai[i]-=2;
if(i-kth+1>=3) dfs(kth,v+1);
}
for(int i=kth;i<=now;i++) pai[i]+=2;
now=-1;
for(int i=kth;i<=14;i++) {
if(!pai[i]) break;
now=i;
pai[i]--;
if(i-kth+1>=5) dfs(kth,v+1);
}
for(int i=kth;i<=now;i++) pai[i]++;
}
if(pai[kth]==4) {
pai[kth]-=4;
used[4]++;dfs(kth+1,v+1);used[4]--;
used[3]++,used[1]++,dfs(kth+1,v+2);used[3]--,used[1]--;
used[2]+=2;dfs(kth+1,v+2);used[2]-=2;
pai[kth]+=4;
}
else if(pai[kth]==3) {
pai[kth]-=3;
used[3]++;dfs(kth+1,v+1);used[3]--;
used[2]++,used[1]++,dfs(kth+1,v+2),used[2]--,used[1]--;
pai[kth]+=3;
}
else if(pai[kth]==2) {pai[kth]-=2;used[2]++;dfs(kth+1,v+1);used[2]--;pai[kth]+=2;}
else if(pai[kth]==1) {pai[kth]--;used[1]++;dfs(kth+1,v+1);used[1]--;pai[kth]++;}
}
int main() {
scanf("%d%d",&T,&n);
while(T--) {
ans=9999999;
memset(pai,0,sizeof pai);memset(used,0,sizeof used);
for(int i=1,a,b;i<=n;i++) {scanf("%d%d",&a,&b);if(a==0) pai[b-1]++;else if(a==1) pai[14]++;else pai[a]++;}
if(pai[0]&&pai[1]) pai[0]--,pai[1]--,dfs(2,1),pai[0]++,pai[1]++,dfs(0,0);
else dfs(0,0);
printf("%d\n",ans);
}
}
[NOIPlus]斗地主的更多相关文章
- NOIP2015斗地主[DFS 贪心]
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- Android斗地主棋牌游戏牌桌实现源码下载
本次给大家分享下Android斗地主棋牌游戏牌桌实现源码下载如下: 为了节约内存资源,每张扑克牌都是剪切形成的,当然这也是当前编程的主流方法. 1.主Activity package com.biso ...
- Android开源益智游戏“斗地主”单机版源代码
Android开源益智游戏"斗地主"单机版源代码 这是一个网上流传的Android开源斗地主单机版项目,运行结果如图: 项目源代码导入到Eclipse后可直接运行,我把ecl ...
- [NOIP2015] 斗地主(搜索)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- Java基础之如何解决斗地主问题
难的是逻辑的分析,把逻辑转化成代码是一种能力,这种能力需要多练习总结. 多多指教,共同进步. 问题: 要求实现斗地主游戏发牌过程,打印三个玩家的牌和底牌.在不看底牌的情况下,统计出三个 ...
- Java写的斗地主游戏源码
源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...
- 斗地主(Noip2015Day1T3)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- BZOJ 4325: NOIP2015 斗地主
4325: NOIP2015 斗地主 Time Limit: 30 Sec Memory Limit: 1024 MBSubmit: 684 Solved: 456[Submit][Status] ...
- UOJ147 斗地主
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
随机推荐
- phpunit使用
phpunit使用 标签(空格分隔): php 现在是凌晨 3 点.我们怎样才能知道自己的代码依然在工作呢? Web 应用程序是 24x7 不间断运行的,因此我的程序是否还在运行这个问题会在晚上一直困 ...
- vue 2.0 购物车小球抛物线
备注:此项目模仿 饿了吗.我用的是最新的Vue, 视频上的一些写法已经被废弃了. 布局代码 <div class="ball-container"> <trans ...
- 流媒体播放器VLC SDL
http://www.cnblogs.com/lihuixian001/archive/2013/03/15/2957103.html https://wiki.videolan.org/Win32C ...
- java的classLoader原理理解和分析
java的classLoader原理理解和分析 学习了:http://blog.csdn.net/tangkund3218/article/details/50088249 ClassNotFound ...
- iOS-UIImageView载入网络下载的图片(异步+多线程)
最原始的载入网络下载的图片方式: //最原始载入网络图片方法,相当堵塞主线程,界面卡顿 -(void)setImageWithURL:(NSString *)imageDownloadUrl{ UII ...
- Codeves 2800 送外卖 状态压缩DP+floyd
送外卖 题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后 ...
- CountDownTimer,0,0
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s ...
- angular 兼容ie11 ie11兼容
兼容一(new Date()用法) new Date('2018-01-01 00:00:00').getHours(); new Date('2018-01-01 00:00:00').getMin ...
- WebService CXF学习:复杂对象传递(List,Map)
转自:https://blog.csdn.net/z69183787/article/details/35988335 第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要 ...
- Laravel异常处理
Laravel异常处理 标签(空格分隔): php 自定义异常类 <?php namespace App\Exceptions; use Throwable; use Exception; cl ...