首页 > 其他分享 >Chiitoitsu(概率DP)

Chiitoitsu(概率DP)

时间:2022-08-17 17:47:26浏览次数:64  
标签:概率 return int ll dfs Chiitoitsu include DP mod

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>

using namespace std;

typedef long long ll;

const int N = 150, M = 10, mod = 1e9 + 7;

char s[N];
map<string, int> mp;
ll f[N][M];

ll qmi(ll a, ll b)
{
    ll res = 1;
    while(b) {
        if(b & 1) res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}

ll inv(ll x)
{
    return qmi(x, mod - 2);
}

ll dfs(int a, int b)
{
    ll &v = f[a][b];
    if(v >= 0) return v;
    ll t = a - 3 * (13 - 2 * b);
    if(t > 0) {
        ll tmp = inv(a);
        ll p1 = t * tmp % mod, p2 = 3 * (13 - 2 * b) * tmp % mod;
        v = (1 + p1 * dfs(a - 1, b) + p2 * dfs(a - 1, b + 1)) % mod;
    }
    else {
        v = (1 + dfs(a - 1, b + 1)) % mod;
    }
    return v;
}

int main()
{
    int T;
    scanf("%d", &T);
    memset(f, -1, sizeof f);
    for(int i = 0; i < N; i ++) f[i][7] = 0;
    for(int cas = 1; cas <= T; cas ++) {
        scanf("%s", s + 1);
        mp.clear();
        for(int i = 1; i <= 13; i ++) {
            string t = "";
            t += s[2 * i - 1], t += s[2 * i];
            mp[t] ++;
        }
        int cnt = 0;
        for(auto p : mp) {
            if(p.second >= 2) cnt ++;
        }
        printf("Case #%d: %lld\n", cas, dfs(123, cnt));
    }
    return 0;
}

标签:概率,return,int,ll,dfs,Chiitoitsu,include,DP,mod
From: https://www.cnblogs.com/miraclepbc/p/16596070.html

相关文章

  • 状压dp
    朴素状压对于数据范围小的题一定要对状压绝对敏感这里的范围小不一定是\(n\)的范围小,而是任何有关信息小于\(20\)时要引起注意P3052[USACO12MAR]CowsinaSkyscr......
  • 达梦dexpdp,dimpdp导出导入数据
    1.创建directorySQL>createdirectorydirectas'/dm8/direct';executedsuccessfullyusedtime:48.272(ms).Executeidis503.2.创建测试用户SQL>createuse......
  • 「AGC012F」Prefix Median 题解 (DP)
    题目简介给定一个长度为\(2n-1\)的序列\(a\),你可以随意排列\(a\)中的元素,请求出有多少种不同的序列\(b\),满足\(b\)的长度为\(n\)。\(b_i=\{a_1\ldotsa_{2......
  • 期望dp
    期望的线性性质:E(ax+by)=aE(X)+bE(Y)1-n总长度的期望到达某个结果的期望值=这个结果*从起始状态到这个状态的概率f[i]=∑1/k*(w[i]+f(S[i])f[i]表示从i走到n的期......
  • Codeforces1699E Three Days Grace【数学】【DP】
    分析:一开始觉得是二分答案,发现行不通之后改为枚举最小值。现在我将这若干个数分解,假设分解完之后得到的最小值为$i$,那么我就是要在最小值为$i$的基础上尽量最小化分解的......
  • 8、ThreadPoolTaskExecutor线程并发
    一、线程池的优点:1、降低资源消耗。通过重复利用自己创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行......
  • cf C. Vertex Deletion 树形DP 删除某写节点 且保证其它节点都有至少一个相连节点的总
     https://codeforces.com/gym/103145/problem/C timelimitpertest1.5secondsmemorylimitpertest256megabytesinputstandardinputoutputstandard......
  • 重修 斜率优化 Dp
    斜率单调暴力移指针斜率不单调二分找答案\(x\)坐标单调开单调队列\(x\)坐标不单调开平衡树/cdq分治P4072[SDOI2016]征途我们要求方差最小,而总和不变,等价于要每......
  • 洛谷P2622 关灯问题II引发的关于DP实现形式及后效性的思考
      动态规划要求已经求解的子问题不受后续阶段的影响,即无后效性。而在这种递推的实现方式中,后面枚举的状态可能更新前面已经枚举过的状态。也就是说,这种递推的实现方式是......
  • ubuntu dpkg问题解决
    问题今天玩ubuntu发现以下报错:dpkgwasinterrupted,youmustmanuallyrunsudodpkg–configure-atocorrecttheproblem 解决sudorm/var/lib/apt/lists/l......