#include #include #include #include #define REP(i,a,b) for(i=a;i 1e-6){ c = (a+b)/2; rep(k,MA+1){ rep(i,211) sum[k][0][i] = sum[k][i][0] = 0; REP(i,-M,VA+1) REP(j,-M,VB+1){ sum[k][M+i+1][M+j+1] = sum[k][M+i][M+j+1] + sum[k][M+i+1][M+j] - sum[k][M+i][M+j]; if(i <= 0 && j <= 0){ dp[k][M+i][M+j] = c; } else if(i <= 0){ dp[k][M+i][M+j] = 0; } else if(j <= 0){ dp[k][M+i][M+j] = 1; } else { dp[k][M+i][M+j] = sum[k][M+i+1][M+j+1] - sum[k][M+i-SB][M+j+1] - sum[k][M+i+1][M+j-SA] + sum[k][M+i-SB][M+j-SA]; dp[k][M+i][M+j] *= per / (1 - per); } if(k && dp[k][M+i][M+j] < dp[k-1][M+(i+1)/2][M+(j+1)/2]) dp[k][M+i][M+j] = dp[k-1][M+(i+1)/2][M+(j+1)/2]; sum[k][M+i+1][M+j+1] += dp[k][M+i][M+j]; } } if(c < dp[MA][M+VA][M+VB]) a = c; else b = c; } printf("%.10f\n",(a+b)/2); return 0; }