这个东西考试的时候一眼以为状压就压炸了考试又了一下午.....最后我打出来发现后几个点10min都过不去,我大概算了一下,可能是吧.......最后一脸懵逼的我去怂了正解,我们发现只要确定了顺子就可以贪心了,所谓贪心就是在扔相同数码牌的基础上从四带二(对),四带二,三带二,三带一,开始贪心,我们的二,一一定是它本身就是这么大,因为,如果不是的话我们只是浪费了弹药却不能得到优惠,而且由于一个四可以带两个一样的单张,我们就不会出现三拆四捡的情况,我们可以把它们看成四类物品,一类是一个的,一类是两个的......,因此我们发现只有三,四物品才可以去带,而且四可以一下带俩,三可以一下一个,我们就变成了,用两种武器去打两种小怪打得最多为最优。

别忘了剪枝。

#include <cstdio>
#include <cstring>
#define N 25
#define r register
using namespace std;
int a[N],c[N],n,T,ans;
inline int read()
{
r int sum=;
r char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
inline int Min(int x,int y)
{
return x<y?x:y;
}
inline int Just()
{
memset(c,,sizeof(c));
r int t=;
for(r int i=;i<=;i++)c[a[i]]++;
while(c[]&&c[]>=)c[]--,c[]-=,t++;
while(c[]&&c[]>=)c[]--,c[]-=,t++;
while(c[4]&&c[2])c[4]--,c[2]--,t++;
while(c[]&&c[])c[]--,c[]--,t++;
while(c[]&&c[])c[]--,c[]--,t++;
return c[]+c[]+c[]+c[]+t;
}
void dfs(int now)
{
if(now>=ans)return;
ans=Min(ans,now+Just());
for(r int i=;i<=;i++)
{
r int k=i;
while(k<=&&a[k]>=)k++;
k--;
if(k-i+<)continue;
for(;k-i+>=;k--)
{
for(r int j=i;j<=k;j++)a[j]-=;
dfs(now+);
for(r int j=i;j<=k;j++)a[j]+=;
}
}
for(r int i=;i<=;i++)
{
r int k=i;
while(k<=&&a[k]>=)k++;
k--;
for(;k-i+>=;k--)
{
for(r int j=i;j<=k;j++)a[j]-=;
dfs(now+);
for(r int j=i;j<=k;j++)a[j]+=;
}
}
for(r int i=;i<=;i++)
{
r int k=i;
while(k<=&&a[k])k++;
k--;
for(;k-i+>=;k--)
{
for(r int j=i;j<=k;j++)a[j]--;
dfs(now+);
for(r int j=i;j<=k;j++)a[j]++;
}
}
}
int main()
{
T=read(),n=read();
while(T--)
{
memset(a,,sizeof(a));
for(r int i=,x;i<=n;i++)
{
scanf("%d%*d",&x);
if(x==)a[]++;
else if(x==)a[]++;
else if(x)a[x-]++;
else a[]++;
}
ans=Just();
dfs();
printf("%d\n",ans);
}
}

【BZOJ4325】NOIP2015 斗地主 搜索+贪心的更多相关文章

  1. 2018.11.01 bzoj4325: NOIP2015 斗地主(贪心+搜索)

    传送门 原来一直以为是一道大模拟. 没想到是一道搜索+最优性剪枝 如何搜最优呢? 我们考虑怎么最快出完. 大概是应该尽量出当前能出出去最多的吧. 于是我们选择优先出顺子. 这样做有什么好处呢? 我们会 ...

  2. 【BZOJ4325】NOIP2015 斗地主 搜索+剪枝

    [BZOJ4325]NOIP2015 斗地主 Description 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗 ...

  3. NOIP2015斗地主[DFS 贪心]

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关系根据牌的数码表示如下:3<4< ...

  4. 洛谷 2668&2540 斗地主——搜索+贪心+dp

    题目:https://www.luogu.org/problemnew/show/P2540 发现如果没有顺子,剩下的可以贪心.所以搜索顺子怎么出,然后贪心. 这样只能过不加强版.原因是贪心的时候难以 ...

  5. 洛谷 P2668 & P2540 [ noip 2015 ] 斗地主 —— 搜索+贪心

    题目:https://www.luogu.org/problemnew/show/P2668   https://www.luogu.org/problemnew/show/P2540 首先,如果没有 ...

  6. bzoj4325: NOIP2015 斗地主(爆搜+模拟)

    去年的我还不会打斗地主呵呵 觉得这道题挺难的..抄了一遍题解,感触挺多的= = 首先出牌的方式太多了不能每次都枚举所有的出牌方式, 于是分成两部分:1.顺子 2.带牌等其他 每次dfs都搜顺子,而且顺 ...

  7. LOJ2422 NOIP2015 斗地主 【搜索+贪心】*

    LOJ2422 NOIP2015 斗地主 LINK 题目大意很简单,就是问你斗地主的一分手牌最少多少次出完 然后我们发现对于一种手牌状态,不考虑顺子的情况是可以贪心做掉的 然后我们直接枚举一下顺子出牌 ...

  8. NOIP2015 斗地主(搜索+剪枝)

    4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 270  Solved: 192[Submit][Status] ...

  9. 2106. [NOIP2015] 斗地主

        2106. [NOIP2015] 斗地主 ★★★☆   输入文件:landlords.in   输出文件:landlords.out   简单对比 时间限制:2 s   内存限制:1025 M ...

随机推荐

  1. python学习之对象的三大特性

    在面向对象程序设计中,对象可以看做是数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合.编写代码时,我们可以将所有功能都写在一个文件里,这样也是可行的,但是这样不利于代码的维护,你总不希 ...

  2. python 复习函数 装饰器

    # 函数 —— 2天 # 函数的定义和调用 # def 函数名(形参): #函数体 #return 返回值 #调用 函数名(实参) # 站在形参的角度上 : 位置参数,*args,默认参数(陷阱),* ...

  3. django之单表查询

    一.创建表 1.创建模型: 创建名为book的app,在book下的models.py中创建模型: from django.db import models # Create your models ...

  4. python继续函数-练习(2017-8-3)

    写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数 def detection(p): intcount = 0 strcount = 0 othercount = 0 spa ...

  5. 网站安全检测 漏洞检测 对thinkphp通杀漏洞利用与修复建议

    thinkphp在国内来说,很多站长以及平台都在使用这套开源的系统来建站,为什么会这么深受大家的喜欢,第一开源,便捷,高效,生成静态化html,第二框架性的易于开发php架构,很多第三方的插件以及第三 ...

  6. PyCharm使用秘籍视频

    PyCharm使用视频上传至企鹅群公告 需要自行添加群获取

  7. linux 操作之一 如何在linux将本地数据*.sql文件导入到linux 云服务器上的mysql数据库

    liunx 版本ubuntu 16.4 mysql 版本  5.6 1)准备*.sql文件 (* 是准备导入的sql文件的名字) 2)liunx 远程客户端  SecureCRT 7.0 alt+p ...

  8. CC3200在sl_Start函数处不断重启复位的原因解析

    1. 使用过程中,自己写的工程,发现CC3200一直重启,首先需要定位出现重启的函数?看门狗复位,还是程序跑飞复位?NWP的版本不匹配?经过测试找到出问题的函数,这个函数是启动网络的函数. lRetV ...

  9. linux的常用易忘命令

    1.查看软件安装路径 [root@localhost ~]# which gcc /usr/bin/gcc 查询进程 ps -ef |grep redis 查看端口 netstat  -lntp |g ...

  10. YAGNI 声明

    1.YAGNI介绍 YAGNI 全名是 You aren't Going to Need It,在你设计草案的初稿中,应该努力使用最简单可以工作的事物,直至程序的某个方面要求你添加额外的特性. 2.思 ...