POJ 3071 Football(概率DP)
2013-07-22 18:21
218 查看
题目链接
不1Y都对不住看过那么多年的球。dp[i][j]表示i队进入第j轮的概率,此题用0-1<<n表示非常方便。
不1Y都对不住看过那么多年的球。dp[i][j]表示i队进入第j轮的概率,此题用0-1<<n表示非常方便。
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; double dp[501][501]; double p[501][501]; int main() { int n,i,j,mod,c,k,ans; double maxz; while(scanf("%d",&n)!=EOF) { if(n < 0) break; for(i = 0;i < (1<<n);i ++) { for(j = 0;j < (1<<n);j ++) { scanf("%lf",&p[i][j]); } } for(i = 0;i < (1<<n);i ++) { dp[0][i] = 1; } for(i = 1;i <= n;i ++) { for(j = 0;j < (1<<n);j ++) dp[i][j] = 0; } for(i = 1;i <= n;i ++) { for(j = 0;j < (1<<n);j ++) { mod = j%(1<<i); if(mod >= (1<<(i-1))) { c = (j/(1<<i))*(1<<i); for(k = 0;k < (1<<(i-1));k ++) { dp[i][j] += dp[i-1][j]*dp[i-1][c+k]*p[j][c+k]; } } else { c = (j/(1<<i))*(1<<i)+(1<<(i-1)); for(k = 0;k < (1<<(i-1));k ++) { dp[i][j] += dp[i-1][j]*dp[i-1][c+k]*p[j][c+k]; } } } } ans = 0;maxz = 0; for(i = 0;i < (1<<n);i ++) { if(maxz < dp [i]) { ans = i; maxz = dp [i]; } } printf("%d\n",ans+1); } return 0; }
相关文章推荐
- poj 3071 Football (概率dp)
- poj 3071 Football(概率dp)
- poj 3071 football 概率dp
- poj - 3071 Football (概率dp)
- POJ 3071 Football (概率dp)
- POJ 3071 Football (很好的一个概率DP)
- poj 3071 Football(概率dp)
- poj 3071 Football (概率DP水题)
- POJ 3071 Football(概率dp)
- POJ 3071 Football (概率DP)
- POJ 3071 Football 【概率DP】
- POJ 3071 Football 概率DP 二进制优化
- poj-3071 Football 【概率dp,位运算】
- POJ 3071 Football 概率DP
- POJ 3071 Football (概率DP)
- poj 3071 Football (概率DP水题)
- POJ 3071 Football 【概率DP】
- poj 3071 Football(概率dp)
- [ACM] POJ 3071 Football (概率DP)
- POJ 3071 - Football(概率DP 求概率)