cf#301

编程入门 行业动态 更新时间:2024-10-09 06:23:12

<a href=https://www.elefans.com/category/jswz/34/1764991.html style=cf#301"/>

cf#301


题意:给三种人,分别是r,s,p个;

在孤岛上,

每两个不同种人相遇则互吃,r吃s,s吃p,p吃r

求最后留下单一种族的概率

设dp[i][j][k]为 剩下i个r,j个s,k个p 的概率,那么可以得到

当r和p相遇,dp[i-1][j][k]+=dp[i][j][k]*(i*k)/(i*j+j*k+k*i);

同理推出另外2种相遇情况

注意控制条件即可

#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iostream>
using namespace std;const double pi=acos(-1.0);
double eps=0.000001; 
int min(int a,int b)
{return a<b?a:b;} 
int max(int a,int b)
{return a>b?a:b;}double dp[105][105][105];
int main()
{	int r,s,p;
cin>>r>>s>>p;
int i,j,k;
dp[r][s][p]=1;
for (i=r;i>=0;i--)
{for (j=s;j>=0;j--){for (k=p;k>=0;k--){if (dp[i][j][k]==0)continue;int kind=0;if (i)kind++;if (j)kind++;if (k)kind++;if (kind==1)continue;if (i>0)dp[i-1][j][k]+=dp[i][j][k]*(i*k)/(i*j+j*k+k*i);if (j>0)dp[i][j-1][k]+=dp[i][j][k]*(i*j)/(i*j+j*k+k*i);if (k>0)dp[i][j][k-1]+=dp[i][j][k]*(k*j)/(i*j+j*k+k*i);}}
}double a1=0,a2=0,a3=0;
for (i=1;i<=r;i++) a1+=dp[i][0][0];
for (i=1;i<=s;i++) a2+=dp[0][i][0];
for (i=1;i<=p;i++) a3+=dp[0][0][i];
printf("%.9lf %.9lf %.9lf\n",a1,a2,a3);return 0;}


更多推荐

cf#301

本文发布于:2024-02-06 13:32:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749427.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:cf

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!