RT。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxm = 120, maxn = 1e4;
int n;
double tab[maxm][maxm];
double dp[maxm][maxn];
int a[maxn];
int main()
{
int m, n;
while (~scanf("%d", &m)) {
m = m*(m-1)*(m-2)/6;
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++)
scanf("%lf", &tab[i][j]);
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
for (int i = 0; i < m; i++)
dp[i][n] = 1;
for (int j = n-1; j >= 0; j--)
for (int i = 0; i < m; i++)
dp[i][j] = tab[i][a[j]] * max(dp[i][j+1], dp[a[j]][j+1]);
double ans = -1;
for (int i = 0; i < m; i++)
ans = max(ans, dp[i][0]);
printf("%lf\n", ans);
}
return 0;
}