概率 dp,dp[i][j][k] 的状态可以从 dp[i+1][j][k],dp[i][j+1][k],dp[i][j][k+1] 得到
- double dp[110][110][110];
- int main() {
- int r,s,p;
- scanf("%d%d%d",&r,&s,&p);
- dp[r][s][p] = 1;
- for(int i = r; i>= 0; i--) {
- for(int j = s; j>= 0; j--) {
- for(int k = p; k>= 0; k--) {
- if(i == r && j == s && k == p);
- else {
- if((i+1)*k+(i+1)*j+j*k != 0) dp[i][j][k] += dp[i+1][j][k] *(i+1)*1.0*k/((i+1)*k+(i+1)*j+j*k);
- if((j+1)*i+(j+1)*k+i*k != 0) dp[i][j][k] += dp[i][j+1][k] *(j+1)*1.0*i/((j+1)*i+(j+1)*k+i*k);
- if((k+1)*i+(k+1)*j+i*j != 0) dp[i][j][k] += dp[i][j][k+1] *(k+1)*1.0*j/((k+1)*i+(k+1)*j+i*j);
- }
- }
- }
- }
- double a = 0,b = 0,c = 0;
- for(int i = 1; i <= r; i++)a+=dp[i][0][0];
- for(int i = 1; i <= s; i++)b+=dp[0][i][0];
- for(int i = 1; i <= p; i++)c+=dp[0][0][i];
- printf("%.10lf %.10lf %.10lf\n",a,b,c);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3357318.html