[bzoj1860 ZJOI2006] 超级麻将 (线性dp)】的更多相关文章

传送门 Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行,每行100个数a1..a100,描述每次玩牌手中各种牌的数量.ai表示数字为i的牌有ai张.(0<=ai<=100) Output 输出N行,若胡了则输出Yes,否则输出No,注意区分Yes,No的大小写! Sample Input 3 2 4 0 0 0 0 0 -- 0(一共98个0) 2 4 2 0 0 0 0 -- 0(一共97个0) 2 3 2 0 0 0 0 --…
题目:https://www.luogu.org/problemnew/show/P2593 发现三个连续牌的影响范围只有3.相同牌的影响范围只有1之后就可以dp了. O(100^7)T飞. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int T,a[N]; ][N][N][N],flag; int rdn()…
设f[i][j][k][0/1]表示选到i时,i-1选j张,i选k张,之前选的所有牌是否选择了对子 然后分情况讨论转移即可 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=105; int n,a[N]; bool f[N][N][N][2]; int main() { scanf("%d",&n); while(n-…
题目描述 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想了想,决定将普通麻将改造成超级麻将. 所谓超级麻将没有了砣.索.万的区分,每种牌上的数字可以是1~100,而每种数字的牌各有100张.另外特别自由的是,玩牌的人手里想拿多少张牌都可以,好刺激哦! 刺激归刺激,但是拿多了怎么胡牌呢? 超级麻将规定只要一个人手里拿的牌是若干句话(三个连续数字的牌各一张组成一句话,三张或者四张同样数字的牌也算一句话),再加上一对相同的牌,就算胡了. 作为信息学竞赛选手的你,麻烦你给这位…
题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9索,1万~9万各有4张,所以共36*3=108张牌.胡牌时每人有14张牌,其中只要某人手里有若干句话(就是同种类型的牌连续三张或同种牌三张),另外再加上一对,即可胡牌.当然如果全是对,叫七小对,也可以胡牌.下图是连三张示例. 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想…
题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9索,1万~9万各有4张,所以共36*3=108张牌.胡牌时每人有14张牌,其中只要某人手里有若干句话(就是同种类型的牌连续三张或同种牌三张),另外再加上一对,即可胡牌.当然如果全是对,叫七小对,也可以胡牌.下图是连三张示例. 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想…
题目地址 :https://www.luogu.org/problemnew/show/P2593. 无脑DP(虽说是抄的额) #include <iostream> #include <cstdio> #include <cstring> using namespace std; inline int read() { ;char ch=getchar(); while(!isdigit(ch))ch=getchar(); )+(res<<)+(ch^),…
f[a][b][c][i]表示考虑到第i个,第i位用了b个,第i-1位用了a个,此时有将/无将(c=1/0)的情况是否可达. 转移分以下几类: 1.调一个将 f[a][b][1][i]|=f[a][b-2][0][i]; 2.碰 f[a][b][0/1][i]|=f[a][b-3][0/i][i]; 3.杠 f[a][b][0/1][i]|=f[a][b-4][0/1][i]; 4.顺 f[a][b][0/1][i]|=f[val[i-2]-b][a-b][0/1][i-1],其中b打完 注意到…
传送门 解题思路 直接爆搜全T..状态数太多了,所以我们考虑贪心+剪枝.贪心:先拿三个连着的,再拿四个一样的,再拿三个一样的,最后拿两个一样的这样的搜索顺序最优,两个的放最后是因为只要这样的一个,三个连着的放开头是因为这样可以照顾到后面很少的情况.这样肯定还是T,我们考虑剪枝,用hash减.考虑如果数据为 12 0 1 0 0 0-. 这样的 ,我们第一种搜的方案是 a[1]里拿三个4,后面发现不行,返回.第二种方案是a[1]拿四个3,发现这两种方案拿完a[1]后 剩下的序列都是0 1 0 0-…
1860: [Zjoi2006]Mahjong麻将 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 412  Solved: 248[Submit][Status][Discuss] Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行,每行100个数a1..a100,描述每次玩牌手中各种牌的数量.ai表示数字为i的牌有ai张.(0<=ai<=100) Output 输出N行,若胡了则输出Ye…