mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
|
#include<cmath>
|
||
|
#include<cstdio>
|
||
|
#include<cstring>
|
||
|
#include<iostream>
|
||
|
#include<algorithm>
|
||
|
using namespace std;
|
||
|
#define N 10005
|
||
|
int m,n;
|
||
|
int ai[N];
|
||
|
double dp[200][N],rate[200][200];
|
||
|
bool vis[200][N];
|
||
|
double search(int team,int lo)
|
||
|
{
|
||
|
if(lo>m-1||team<0||team>n)
|
||
|
return 1;
|
||
|
if(vis[team][lo]==true)
|
||
|
return dp[team][lo];
|
||
|
else
|
||
|
{
|
||
|
double t=search(team,lo+1);
|
||
|
if(team!=ai[lo])
|
||
|
{
|
||
|
double t2=search(ai[lo],lo+1);
|
||
|
if(t2>t)
|
||
|
t=t2;
|
||
|
}
|
||
|
vis[team][lo]=true;
|
||
|
dp[team][lo]=rate[team][ai[lo]]*t;
|
||
|
return dp[team][lo];
|
||
|
}
|
||
|
}
|
||
|
int main()
|
||
|
{
|
||
|
int i,j;
|
||
|
while(scanf("%d",&n)!=EOF)
|
||
|
{
|
||
|
n=n*(n-1)*(n-2);
|
||
|
n/=6;
|
||
|
for(i=0;i<n;i++){
|
||
|
for(j=0;j<n;j++)
|
||
|
{
|
||
|
scanf("%lf",&rate[i][j]);
|
||
|
}
|
||
|
}
|
||
|
scanf("%d",&m);
|
||
|
for(i=0;i<m;i++)
|
||
|
scanf("%d",&ai[i]);
|
||
|
memset(vis,false,sizeof(vis));
|
||
|
for(i=0;i<n;i++)
|
||
|
{
|
||
|
dp[i][m-1]=rate[i][ai[m-1]];
|
||
|
vis[i][m-1]=true;
|
||
|
}
|
||
|
double _max=0;
|
||
|
for(i=0;i<n;i++)
|
||
|
{
|
||
|
_max=max(_max,search(i,0));
|
||
|
}
|
||
|
printf("%.6lf\n",_max);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|