uva 542 - France '98(概率)
2013-10-29 21:35
411 查看
题目链接:uva 542 - France '98
题目大意:有16支球队比赛,给出16支球队的名称,然后给出16*16的表格,g[i][j] 表示i队胜j队的概率,问说16支球队获得总冠军的概率。
解题思路:模拟比赛的过程,将队伍分组,每次和组内的其他队伍决胜负,概率之和即为出现的概率,只要处理好下标就可以了。
题目大意:有16支球队比赛,给出16支球队的名称,然后给出16*16的表格,g[i][j] 表示i队胜j队的概率,问说16支球队获得总冠军的概率。
解题思路:模拟比赛的过程,将队伍分组,每次和组内的其他队伍决胜负,概率之和即为出现的概率,只要处理好下标就可以了。
#include <stdio.h> #include <string.h> #include <math.h> const int N = 16; char name[N + 10][N + 10]; double p[N + 10][N + 10]; double ans[N + 10], rec[N + 10]; void init() { for (int i = 1; i <= N; i++) scanf("%s", name[i]); int c; for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) { scanf("%d", &c); p[i][j] = c / 100.0; } for (int i = 1; i <= N; i++) ans[i] = 1; } int main () { int group, tmp, g, s; init(); for (int i = 0; i < 4; i++) { group = pow(2, i + 1); tmp = group / 2; for (int i = 1; i <= N; i++) { double c = 0; g = (i - 1) / group; if ((i - 1) % group < tmp) { s = g * group + tmp; } else { s = g * group; } for (int j = 1; j <= tmp; j++) c += ans[i] * p[i][j + s] * ans[j + s]; rec[i] = c; } memcpy(ans, rec, sizeof(ans)); } for (int i = 1; i <= N; i++) printf("%-10s p=%.2lf%c\n", name[i], ans[i] * 100, '%'); return 0; }
相关文章推荐
- UVA 542 France '98
- uva 542 - France '98(概率)
- France '98 - UVa 542 概率dp
- uva 542 France '98
- UVa 542 - France '98
- UVa:542 France '98
- uva542 - France '98
- UVA542 - France '98(dp)
- uva 542 France '98
- 542 - France '98 (概率 dp)
- UVA 542 France '98
- 542 - France '98
- UVA 11722 Joining with Friend 图形面积+概率
- UVa 11021 - Tribles (概率DP)
- UVa 11346 Probability (转化+积分+概率)
- (Relax DP1.4)UVA 10648 Chocolate Box(求将n个巧克力放在m个盒子中的概率)
- UVA - 1456(cellular network 概率dp)
- UVA - 11762 - Race to 1 记忆化概率
- UVa 10900 (连续概率、递推) So you want to be a 2n-aire?
- UVA - 10288 Coupons (概率+递推)