您的位置:首页 > 其它

Bad Luck Island-CodeForce(dp)

2015-11-20 20:52 197 查看
链接:http://codeforces.com/problemset/problem/540/D

题目大意:

这个岛上有三种生物 r石头 s剪刀 p布

求最后只剩一种生物的概率

用dp[i][j][k]表示概率

石头和剪刀相遇的概率是p=i*j/(i*j+j*k+k*i),剪刀会被吃掉 所以dp[i][j-1][k]=dp[i][j][k]*p;每一种情况都会有三种情况演变过来的,所以每次都要加上他

上代码 应该看代码就能看懂

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#define N 110
using namespace std;
double dp

;
int main()
{
int r,s,p,i,j,k;

while(scanf("%d %d %d",&r,&s,&p)!=EOF)
{
memset(dp,0,sizeof(dp));
dp[r][s][p]=1.0;
for(i=r;i>=0;i--)
{
for(j=s;j>=0;j--)
{
for(k=p;k>=0;k--)
{
double sum=i*j+j*k+k*i;
if(i && k)
dp[i-1][j][k]+=dp[i][j][k]*i*k*1.0/sum;
if(j && i)
dp[i][j-1][k]+=dp[i][j][k]*i*j*1.0/sum;
if(k && j)
dp[i][j][k-1]+=dp[i][j][k]*k*j*1.0/sum;
}
}
}
double x=0,y=0,z=0;
for(i=r;i>0;i--)
x+=dp[i][0][0];
for(i=s;i>0;i--)
y+=dp[0][i][0];
for(i=p;i>0;i--)
z+=dp[0][0][i];
printf("%.12lf %.12lf %.12lf\n",x,y,z);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: