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\n",ma1); } return 0; }