洛谷 P2668 斗地主
毒瘤题目,搞了三天……
也没什么好讲的,就是纯搜索,先搜顺子,再搜其他的,最后单张牌和对子的时候,就不要搜索了,直接枚举,不然会T飞掉多么痛的领悟……
主要还是靠码力
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n;
int card[25],sp[25],ans=0x7fffff;
int x;
inline int read()
{
int k=0,f=1;
char c=getchar();
for(;!isdigit(c);c=getchar())
if(c=='-')
f=-1;
for(;isdigit(c);c=getchar())
k=(k<<3)+(k<<1)+c-48;
return k*f;
}
void dfs(int sum,int step)
{
if(sum<0||step>=ans)
return;
if(sum==0)
{
ans=min(ans,step);
return ;
}
//============顺子
int flag[101]={0},tot=0,pc[101]={0};
flag[3]=flag[2]=flag[1]=0; tot=0;
for(int i=3;i<=14;i++)
{
if(card[i]>=3)
{
flag[3]++;
pc[++tot]=i;
}
else
{
flag[3]=0;
tot=0;
continue;
}
if(flag[3]>=2)
{
for(int j=1;j<=tot;j++)
{
card[pc[j]]-=3;
}
dfs(sum-3*tot,step+1);
for(int j=1;j<=tot;j++)
{
card[pc[j]]+=3;
}
}
}
tot=0;
for(int i=3;i<=14;i++)
{
if(card[i]>=2)
{
flag[2]++;
pc[++tot]=i;
}
else
{
flag[2]=0;
tot=0;
continue;
}
if(flag[2]>=3)
{
for(int j=1;j<=tot;j++)
{
card[pc[j]]-=2;
}
dfs(sum-2*tot,step+1);
for(int j=1;j<=tot;j++)
{
card[pc[j]]+=2;
}
}
}
tot=0;
for(int i=3;i<=14;i++)
{
if(card[i]>=1)
{
flag[1]++;
pc[++tot]=i;
}
else
{
flag[1]=0;
tot=0;
continue;
}
if(flag[1]>=5)
{
for(int j=1;j<=tot;j++)
{
card[pc[j]]-=1;
}
dfs(sum-tot,step+1);
for(int j=1;j<=tot;j++)
{
card[pc[j]]+=1;
}
}
}
//========四带
flag[11]=flag[12]=0;
for(int i=3;i<=15;i++)
{
if(card[i]>=4)
{
card[i]-=4;
for(int j=0;j<=15;j++)
{
if(card[j]>=4)
{
card[j]-=4;
dfs(sum-8,step+1);
card[j]+=4;
}
if(card[j]>=2)
{
card[j]-=2;
for(int k=3;k<=15;k++)
{
if(card[k]>=2)
{
card[k]-=2;
dfs(sum-8,step+1);
card[k]+=2;
}
}
dfs(sum-6,step+1);
card[j]+=2;
}
if(card[j]>0)
{
for(int k=0;k<15;k++)
{
if(card[k]>0)
{
if(j==k)
continue;
card[j]-=1; card[k]-=1;
dfs(sum-6,step+1);
card[j]+=1; card[k]+=1;
}
}
}
}
dfs(sum-4,step+1);
card[i]+=4;
}
}
//======三带
flag[11]=flag[12]=0;
for(int i=1;i<=15;i++)
{
if(card[i]>=3)
{
card[i]-=3;
for(int j=0;j<=15;j++)
{
if(i==j)
continue;
if(card[j]>=1)
{
card[j]-=1;
dfs(sum-4,step+1);
card[j]+=1;
}
if(card[j]>=2&&j!=0)
{
card[j]-=2;
dfs(sum-5,step+1);
card[j]+=2;
}
}
dfs(sum-3,step+1);
card[i]+=3;
}
}
//单张+对子
flag[32]=0,flag[5]=0;
for(int i=0;i<=15;i++)
{
if(card[i]==2)
{
flag[5]++;
}
if(card[i]==1)
{
flag[32]++;
}
}
if(sum-2*flag[5]-flag[32]==0)
ans=min(ans,step+flag[5]+flag[32]);
}
int main()
{
t=read(),n=read();
while(t--)
{
ans=0x7fffff;
memset(card,0,sizeof(card));
for(int i=1;i<=n;i++)
{
int col,x;
x=read(),col=read();
if(x==1||x==2)
card[13+x]++;
else
card[x]++;
}
dfs(n,0);
printf("%d\n",ans);
}
return 0;
}
洛谷 P2668 斗地主的更多相关文章
- 洛谷P2668 斗地主==codevs 4610 斗地主[NOIP 2015 day1 T3]
P2668 斗地主 326通过 2.6K提交 题目提供者洛谷OnlineJudge 标签搜索/枚举NOIp提高组2015 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 出现未知错误是说梗啊 ...
- [NOIP2015] 提高组 洛谷P2668 斗地主
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 洛谷P2668 斗地主 [NOIP2015]
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 洛谷P2668斗地主(搜索)noip2015
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...
- 洛谷—— P2668 斗地主
https://www.luogu.org/problem/show?pid=2668 题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54 ...
- 洛谷P2668 斗地主
好,终于搞完了这一道毒瘤题...... 先想到搜索,然后想到状压,发现数据组数很多,又是随机,还是决定用搜索. 先搜出的多的,于是顺序是三个顺子,然后按照多到少搜带牌,最后是不带牌. 大体思路很简单, ...
- 题解【洛谷P2668】[NOIP2015]斗地主
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的 $ A $ 到 $ K $ 加上大小王的共 $ 54 $ 张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据 ...
- 洛谷 P2668 & P2540 [ noip 2015 ] 斗地主 —— 搜索+贪心
题目:https://www.luogu.org/problemnew/show/P2668 https://www.luogu.org/problemnew/show/P2540 首先,如果没有 ...
- 【noip】跟着洛谷刷noip题
传送门 1.铺地毯 d1t1 模拟 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> # ...
随机推荐
- unity surface shader 1
Unity ShaderLib : CGPROGRAM ENDCG之间是CG代码,之外的代码功能都由ShaderLib提供,CG中的一些方法比如tex2D(...)也是ShaderLib对CG进行 ...
- Codevs 1018 单词接龙
1018 单词接龙 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描 ...
- [Xcode 实际操作]九、实用进阶-(11)系统本地通知的创建和使用
目录:[Swift]Xcode实际操作 本文将演示系统本地通知的创建和使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //引入需要 ...
- IT兄弟连 JavaWeb教程 Servlet会话跟踪 创建Cookie
Tomcat作为Web服务器,对Cookie提供了良好的支持.那么,运行在Tomcat的Servlet该如何访问Cookie呢?幸运的是,Servlet无需直接和HTTP请求或响应中的原始Cookie ...
- 2.Python基础认识(格式化输出,while语句,运算符,编码,单位转化)
Python基础认识 1.字符串的格式化初识及占位符的简单应用 字符串的格式化 按照既定的要求进行有规定排版的一种输出方式. #我们想要输出的格式如下: ----------------------- ...
- mysql之SQL入门与提升(四)——终结篇,函数
一.SQL Aggregate (聚合)函数 SQL Aggregate 函数计算从列中取得的值,返回一个单一的值. AVG() - 返回平均值 COUNT() - 返回行数 FIRST() - 返回 ...
- JAVA 7新特性——在单个catch代码块中捕获多个异常,以及用升级版的类型检查重新抛出异常
在Java 7中,catch代码块得到了升级,用以在单个catch块中处理多个异常.如果你要捕获多个异常并且它们包含相似的代码,使用这一特性将会减少代码重复度.下面用一个例子来理解. Java 7之前 ...
- Django (八) 中间件&验证码&富文本&缓存
中间件&验证码&富文本&缓存 1. 中间件&AOP 中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) 中间件的本质就是一 ...
- VMware下OSSIM 5.2.0的下载、安装和初步使用(图文详解)
不多说,直接上干货! 入门阶段不建议选用最新的版本. 采用OSSIM 4.11 到 OSSIM5.0.3 之间任何版本做实验,sensor的状态都会是“V”. 建议,入门,采用OSSIM5.0.0 ...
- 别让CDN的回源把你的服务器拖垮,采用正确的回源策略
我们有一台服务器提供的服务主要是以动态页面为主,静态页面都是固定的内容平时更新的很少,最近这台服务器的应用升级到了新版本访问量增大了不少,随之的问题就来了,最近每天一到9点负载就超过警戒值,然后负载持 ...