ZOJ 3735 Josephina and RPG (概率dp)

℡╲_俬逩灬. 提交于 2019-11-26 17:12:42

题意:给你一个n,然后给你C(n,3)个队伍, 给你每个队伍之间的胜率。 接下来给你m个队伍,让你依次跟他们比赛,开始你能选择任意的队伍,如果你打赢了一支队伍,你可以选择换成输给你的这个队伍或者不换,你能随便选队伍,求完胜的最大概率(初始队伍让你随便选)。

 

思路:我们开个二维dp【i】【j】表示赢得前i个队伍后且当前的队伍是j的最大胜率。

 

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;

double dp[N][200], ma[200][200];
int main()
{
    int n;
    while( cin >> n){
        int len = n*(n-1)*(n-2)/6;
        for(int i = 1; i <= len; i++){
            dp[0][i] = 1;  //初始化
            for(int j = 1; j <= len; j++)
                cin >> ma[i][j];
        }
        cin >> n; double x;
        for(int i = 1; i <= n; i++){
            int pos; cin >> pos; pos++; x = 0;
            for(int j = 1; j <= len; j++){
                dp[i][j] = dp[i-1][j] * ma[j][pos];
                x = max(x, dp[i][j]);
            }
            dp[i][pos] = x;
        }
        printf("%.6lf\n",x);
    }
    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!