hdu 4800 Josephina and RPG

简单dp

#include<cstdio>
#define maxn 10005
#include<cstring>
#include<algorithm>
using namespace std;

double dp[140][maxn];
double t[140][140];
int num[maxn];

int main()
{
    int n,m;
    while(scanf("%d",&m)!=EOF)
    {
        m=(m*(m-1)*(m-2)/6);
        for(int i=0; i<m; i++)
        {
            for(int j=0; j<m; j++)
            {
                scanf("%lf",&t[i][j]);
            }
            dp[i][0]=1;
        }
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&num[i]);
        }
        double ma1=1,ma2;
        for(int j=1; j<=n; j++) //第j个敌人被第i个team打败;
        {
            ma2=-1.0;
            for(int i=0; i<m; i++)
            {
                if(i==num[j-1])
                    dp[i][j]=ma1*t[num[j-1]][num[j]];
                else dp[i][j]=dp[i][j-1]*t[i][num[j]];
                if(dp[i][j]>ma2)ma2=dp[i][j];
            }
            ma1=ma2;
        }
        ma1=0;
        for(int i=0; i<m; i++)
            if(ma1<dp[i][n])ma1=dp[i][n];
        printf("%lf
",ma1);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/yours1103/p/3598826.html