题目描述

要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想了想,决定将普通麻将改造成超级麻将。

所谓超级麻将没有了砣、索、万的区分,每种牌上的数字可以是1~100,而每种数字的牌各有100张。另外特别自由的是,玩牌的人手里想拿多少张牌都可以,好刺激哦!

刺激归刺激,但是拿多了怎么胡牌呢?

超级麻将规定只要一个人手里拿的牌是若干句话(三个连续数字的牌各一张组成一句话,三张或者四张同样数字的牌也算一句话),再加上一对相同的牌,就算胡了。

作为信息学竞赛选手的你,麻烦你给这位超级麻将迷编个程序,判断能否胡牌。

Solution

可行性dp,设dp[i][j][k][0/1]为到第i个,当前用了k个,上一次用j个,出没出对子,能否可行。

转移:

出顺,则必须保证dp[i-1][a[i-2]-k][j-k][0/1]。

然后讨论一下出对,三个的,四个的,同层转移,

Code

#include<iostream>
#include<cstdio>
#include<bitset>
#include<cstring>
using namespace std;
bool dp[][][][];
int t,b[],a[];
int rd(){
int x=;char c=getchar();
while(!isdigit(c))c=getchar();
while(isdigit(c)){
x=(x<<)+(x<<)+(c^);
c=getchar();
}
return x;
}
int main(){
t=rd();
while(t--){
memset(dp,,sizeof(dp));dp[][][][]=;
for(int i=;i<=;++i){
a[i]=rd();
for(int j=;j<=a[i-];++j)
for(int k=;k<=a[i];++k){
if(k>)dp[i][j][k][]|=dp[i][j][k-][];
if(k>)dp[i][j][k][]|=dp[i][j][k-][],dp[i][j][k][]|=dp[i][j][k-][];
if(k>)dp[i][j][k][]|=dp[i][j][k-][],dp[i][j][k][]|=dp[i][j][k-][];
if(j>=k&&a[i-]>=k)dp[i][j][k][]|=dp[i-][a[i-]-k][j-k][],dp[i][j][k][]|=dp[i-][a[i-]-k][j-k][];
}
}
printf(dp[][a[]][a[]][]?"Yes\n":"No\n");
}
return ;
}

[ZJOI2006]超级麻将(可行性dp)的更多相关文章

  1. 洛谷2593 [ZJOI2006]超级麻将——可行性dp

    题目:https://www.luogu.org/problemnew/show/P2593 发现三个连续牌的影响范围只有3.相同牌的影响范围只有1之后就可以dp了. O(100^7)T飞. #inc ...

  2. [bzoj1860 ZJOI2006] 超级麻将 (线性dp)

    传送门 Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行,每行100个数a1..a100,描述每次玩牌手中各种牌的数量.ai表示数字为i的 ...

  3. 洛谷 P2593 [ZJOI2006]超级麻将【dp】

    设f[i][j][k][0/1]表示选到i时,i-1选j张,i选k张,之前选的所有牌是否选择了对子 然后分情况讨论转移即可 #include<iostream> #include<c ...

  4. [ZJOI2006]超级麻将

    题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9 ...

  5. [ZJOI2006]超级麻将(动规)

    题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9 ...

  6. [Luogu2593] [ZJOI2006]超级麻将

    题目地址 :https://www.luogu.org/problemnew/show/P2593. 无脑DP(虽说是抄的额) #include <iostream> #include & ...

  7. [LUOGU] P2593 [ZJOI2006]超级麻将

    f[a][b][c][i]表示考虑到第i个,第i位用了b个,第i-1位用了a个,此时有将/无将(c=1/0)的情况是否可达. 转移分以下几类: 1.调一个将 f[a][b][1][i]|=f[a][b ...

  8. LUOGU 2593 : [Zjoi2006] 超级麻将

    传送门 解题思路 直接爆搜全T..状态数太多了,所以我们考虑贪心+剪枝.贪心:先拿三个连着的,再拿四个一样的,再拿三个一样的,最后拿两个一样的这样的搜索顺序最优,两个的放最后是因为只要这样的一个,三个 ...

  9. 洛谷P2593 [ ZJOI 2006 ] 超级麻将 —— DP

    题目:https://www.luogu.org/problemnew/show/P2593 DP的话,考虑到当前这一位只跟前两位有关,所以记录一下这3位的状态就行: 于是一开始记录的第 i 位,i- ...

随机推荐

  1. 网站之robots.txt文件

    一.robots.txt是什么?   robots.txt是一个纯文本文件,在这个文件中网站管理者可以声明该网站中不想被搜索引擎访问的部分,或者指定搜索引擎只收录指定的内容. 当一个搜索引擎(又称搜索 ...

  2. Redis 使用命令行的方式 获取 hash type key 的value值

    1. 之前只是非常简单的看了下 get key 和 set key 但是这样 设置的 key value 应该是都 string 类型的 2. 但是没考虑过其他类型的 是如何获取 相关内容的 ,一直 ...

  3. MySQL客户端工具及SQL

    一.客户端命令介绍 mysql  mysqladmin mysqldump mysql 1.用于数据库的连接管理 2. mysqladmin 1. 2. mysqldump 1. 2.

  4. smarTTY总是失败连接的原因

    首先用命令 IP addr 查看是否ip 地址错误  事实证明就是因为我的ip地址发生了变化所以导致连接不上, 不过有一次,我将电脑重启 也是连接上了的.

  5. Storm原理

    zookeeper是对称结构

  6. shell中数组及其相关操作

    转载 https://blog.csdn.net/jerry_1126/article/details/52027539

  7. 一、IntelliJ IDEA创建java项目

    一.IntelliJ IDEA创建java项目 二.IntelliJ IDEA下载并包含jdbc包 1.下载zip格式的驱动包:https://dev.mysql.com/downloads/conn ...

  8. Windows7 (Win7) 配置Windows Update 时失败 正在还原更改

    用WinPE启动后,进入Windows\WinSxS目录,想办法删掉pending.xml和reboot.xml

  9. How to SHA1 on macOS

    openssl sha1 /volumes/test/install/osx-test.dmg

  10. react事件绑定,事件传参,input单向数据绑定

    import React, { Component } from 'react'; class New extends Component { constructor(props){ super(pr ...