2010 Chengdu Regional H game, probability dp

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

double dp[2][3][4][19][28][28];//状态分别是(轮次)(最上层数)(第二层状态)(A状态个数)(B状态个数)(C状态个数),D状态个数和高度可以算出来
bool vis[2][3][4][19][28][28];

double ba1, da1, ba2, da2, ba3, da3;
double bc1, dc1, bc2, dc2, bc3, dc3;
int n;

double dfs(int flor, int top, int below, int a, int b, int c){
    if(vis[flor][top-1][below][a][b][c])return dp[flor][top-1][below][a][b][c];
    vis[flor][top-1][below][a][b][c]=true;
    int bn=0;
    if(below==0)bn=3;
    else if(below==1)bn=2;
    else if(below==2)bn=2;
    else bn=1;
    int d=n*3-top-bn-a*3-b*2-c*2;
    int h=a+b+c+d+2;
    double M=0;
    double p1, p2, p3;
    if(flor==0){
        p1=ba1-da1*h;
        p2=ba2-da2*h;
        p3=ba3-da3*h;
    }
    else {
        p1=bc1-dc1*h;
        p2=bc2-dc2*h;
        p3=bc3-dc3*h;
    }
    if(p1>1)p1=1;
    if(p1<0)p1=0;
    if(p2>1)p2=1;
    if(p2<0)p2=0;
    if(p3>1)p3=1;
    if(p3<0)p3=0;
    if(top==3){
        if(below==0)a++;
        if(below==2)c++;
        if(a){
            if(M<p1)M=max(M, (p1)*(1-dfs(flor^1, 1, 0, a-1, b+1, c)));
            if(M<p2)M=max(M, (p2)*(1-dfs(flor^1, 1, 0, a-1, b, c+1)));
        }
        if(c){
            if(M<p3)M=max(M, (p3)*(1-dfs(flor^1, 1, 0, a, b, c-1)));
        }
        if(below==0)a--;
        if(below==2)c--;
    }
    else {
        if(a){
            if(M<p1)M=max(M, (p1)*(1-dfs(flor^1, top+1, below, a-1, b+1, c)));
            if(M<p2)M=max(M, (p2)*(1-dfs(flor^1, top+1, below, a-1, b, c+1)));
        }
        if(c){
            if(M<p3)M=max(M, (p3)*(1-dfs(flor^1, top+1, below, a, b, c-1)));
        }
    }
    return dp[flor][top-1][below][a][b][c]=M;
}

int main()
{
    int T;
    scanf("%d", &T);
    while(T--){
        cin>>n;
        cin>>ba1>>da1>>ba2>>da2>>ba3>>da3>>bc1>>dc1>>bc2>>dc2>>bc3>>dc3;
        memset(dp, 0, sizeof(dp));
        memset(vis, false, sizeof(vis));
        double ans=dfs(0, 3, 0, n-2, 0, 0);
        printf("%.4f\n", ans);
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325946034&siteId=291194637