bzoj4832 抵制克苏恩

题意

出门右转https://www.lydsy.com/JudgeOnline/problem.php?id=4832

题解

容易知道血量相同的奴隶主性质相同。

所以记忆化搜索就好了!

调试记录

  • 记忆化搜索时没有判断当前有没有存在某种奴隶主。

代码

#include <bits/stdc++.h>
using namespace std;

typedef long double ld;
ld dp[55][8][8][8];
ld dfs(int k,int a,int b,int c) {
    if (k == 0) return 0;
    if (dp[k][a][b][c]) return dp[k][a][b][c];
    // attack , main
    ld ret = dfs(k-1, a, b, c) + 1;
    // attack a
    if (a) ret += dfs(k-1, a-1, b, c) * a;
    // attack b
    if (b) ret += dfs(k-1, a+1, b-1, min(7-a-b, c+1)) * b;
    // attack c
    if (c) ret += dfs(k-1, a, b+1, min(6-a-b, c)) * c;
    return dp[k][a][b][c] = ret / (1 + a + b + c);
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        int k, a, b, c;
        scanf("%d%d%d%d", &k, &a, &b, &c);
        if (!dfs(k, a, b, c)) printf("0.00\n");
        else printf("%.2Lf\n", dfs(k, a, b, c));
    }
    return 0;
}
posted @ 2018-08-14 09:33  MCH__ds  阅读(248)  评论(0编辑  收藏  举报