您的位置:首页 > 其它

UVa 542 - France '98

2017-09-20 17:51 330 查看
题目:有16支球队,并且知道他们两两比赛的输赢概率,问最后每个球队获得冠军的概率。

分析:数学题。数据较小,这里利用递归求解。

说明:注意输出格式。

#include <stdio.h>
#include <stdlib.h>

char countries[16][11];
double matrix[16][16];

double dfs(int k, int l, int r)
{
if (l == r) {
return 1.0;
}
double p, ans = 0.0;
if (k <= (r+l)/2) {
p = dfs(k, l, (r+l)/2);
for (int i = (r+l)/2+1; i <= r; ++ i) {
ans += dfs(i, (r+l)/2+1, r) * matrix[k][i];
}
}else {
p = dfs(k, (r+l)/2+1, r);
for (int i = l; i <= (r+l)/2; ++ i) {
ans += dfs(i, l, (r+l)/2) * matrix[k][i];
}
}
return ans * p;
}

int main()
{
for (int i = 0; i < 16; ++ i) {
scanf("%s",countries[i]);
}
for (int i = 0; i < 16; ++ i) {
for (int j = 0; j < 16; ++ j) {
scanf("%lf",&matrix[i][j]);
matrix[i][j] /= 100.0;
}
}
for (int i = 0; i < 16; ++ i) {
printf("%-10s p=%.2lf%%\n", countries[i], 100.0*dfs(i, 0, 15));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: