POJ 2261
2012-10-18 13:24
183 查看
题意:16个国家的竞赛图,给出每个国家打败其他国家的概率,求每个国家最后夺冠的概率。
题解:dp[i][k]代表第i个国家成功进入第k轮的概率,那么dp[i][k]=sum(dp[i][k-1]*dp[j][k-1]*vs[i][j]),其中,j为这一轮i可能面对的国家。PS:国家名字占10个字符,还需要空一格再输出概率~
View Code
题解:dp[i][k]代表第i个国家成功进入第k轮的概率,那么dp[i][k]=sum(dp[i][k-1]*dp[j][k-1]*vs[i][j]),其中,j为这一轮i可能面对的国家。PS:国家名字占10个字符,还需要空一格再输出概率~
View Code
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char name[20][50]; double dp[20][20],vs[20][20]; int main() { memset(dp,0,sizeof(dp)); for(int i=0;i<16;i++) gets(name[i]),dp[i][0]=1.0; for(int i=0;i<16;i++) for(int j=0;j<16;j++) scanf("%lf",&vs[i][j]),vs[i][j]/=100.0; for(int k=1;k<=4;k++) { int len=1<<k,mid=len>>1; for(int i=0;i<16;i+=len) { for(int j=0;j<mid;j++) { for(int t=mid;t<len;t++) { dp[i+j][k]+=dp[i+j][k-1]*dp[i+t][k-1]*vs[i+j][i+t]; dp[i+t][k]+=dp[i+j][k-1]*dp[i+t][k-1]*vs[i+t][i+j]; } } } } for(int i=0,j;i<16;i++) { j=0; while(name[i][j]!='\0') putchar(name[i][j++]); while(j<10) putchar(' '),j++; printf("p=%.2lf%%\n",dp[i][4]*100.0); } return 0; }
相关文章推荐
- poj 1159 Palindrome
- poj 2826 An Easy Problem?!(线段交,细节题)
- poj 3292 Semi-prime H-numbers
- POJ 2187 Beauty Contest(凸包+旋转卡壳)
- POJ 1966 无向图点联通度 最小割
- poj 1250 Tanning Salon
- POJ 1062 昂贵的聘礼
- POJ 1833 排列 (STL)
- 【最大流(EK)】poj 1149 PIGS
- poj 2109 -- Power of Cryptography
- POJ 1068 Parencodings (类似括号的处理问题)
- POJ 1988 Cube Stacking
- HDU 1063 Exponentiation&&POJ 1001 Exponentiation
- poj 2388 Who&#39;s in the Middle
- poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
- 【POJ 1050】To the Max
- POJ 1836 Alignment(DP | LIS)
- 食物链(poj1182)
- 挑战第二章 poj 3009 水题DFS
- POJ3494——Largest Submatrix of All 1’s(栈的应用)