I-Chiitoitsu
题目大意:
只有一个玩家。从一副麻将(136张牌)里摸了13张牌,每种牌型最多有两张,要组成七对子,求接下来期望摸的牌数。
思路:
一道期望dp问题。
因为初始时每种牌最多摸到两张,已经组成对子的牌就不用管了,只要将手中的单牌凑成对子就行。当摸到一张手中没有的牌时,扔掉这张牌和扔掉手中的单牌是一样的,对期望没有影响,因为两种牌在牌堆里的剩余牌数都是3张。
在摸到一张牌时有两种情况,要么可以和手中的单牌组成对子,要么不能,如果不能的话就还要接着摸。
那么状态转移方式就是 fcur = 1(摸了一张牌) + p(组不成对子的概率) * fnext(下一个状态)
AC代码:
#include <bits/stdc++.h>
#define mem(a, v) memset(a, v, sizeof(a))
using namespace std;
const long long mod = 1e9 + 7;
long long ksm(long long base, long long power)
{
long long result = 1;
base %= mod;
while (power)
{