首页 > 其他 > 详细

poj 3071 Football 概率dp

时间:2015-12-02 22:26:33      阅读:284      评论:0      收藏:0      [点我收藏+]

点我看题

这个题的状态转移方程很好写,  然而他的对手并不是那么好找......

如果把编号从0开始的话, 就可以发现, 一个队伍的第i轮的对手, 是二进制里面第i位和它相反, 并且高位和它完全相同的数。知道了这个这题就没难度了(尽管我没找到这个关系

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define mem(a) memset(a, 0, sizeof(a))
 4 double dp[150][150], a[150][150];
 5 int main()
 6 {
 7     int n;
 8     while(cin>>n) {
 9         if(n == -1)
10             break;
11         for(int i = 0; i<(1<<n); i++) {
12             for(int j = 0; j<(1<<n); j++) {
13                 scanf("%lf", &a[i][j]);
14             }
15         }
16         mem(dp);
17         for(int i = 0; i<(1<<n); i++)
18             dp[0][i] = 1;
19         for(int i = 1; i<=n; i++) {
20             for(int j = 0; j<(1<<n); j++) {
21                 for(int k = 0; k<(1<<n); k++) {
22                     if(((j>>(i-1))^1) == (k>>(i-1))) {
23                         dp[i][j] += dp[i-1][j]*dp[i-1][k]*a[j][k];
24                     }
25                 }
26             }
27         }
28         int ans;
29         double maxx = 0;
30         for(int i = 0; i<(1<<n); i++) {
31             if(dp[n][i]>maxx) {
32                 maxx = dp[n][i];
33                 ans = i;
34             }
35         }
36         cout<<ans+1<<endl;
37     }
38 }

 

poj 3071 Football 概率dp

原文:http://www.cnblogs.com/yohaha/p/5014213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!