您的位置:首页 > 其它

概率DP POJ3071

2015-07-23 22:02 225 查看
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;

double p[300][300];
double dp[10][300];

int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
if ( n == -1 ) break;
int m=1<<n;
for(int i=0;i<m;i++)
for(int t=0;t<m;t++)
scanf("%lf",&p[i][t]);
for(int i=0;i<m;i++)
dp[0][i]=1.0;
for(int i=1;i<=n;i++)
{
for(int t=0;t<m;t++)
{
dp[i][t]=0;
for(int k=0;k<m;k++)
{
if(((t>>(i-1))^1)==(k>>(i-1)))
{
dp[i][t]+=dp[i-1][t]*dp[i-1][k]*p[t][k];
}
}
}
}
int ans=0;
for(int i=1;i<m;i++)
{
if(dp
[i]>dp
[ans])
ans=i;
}
cout<<ans+1<<"\n";
}
return 0;
}


View Code
最后注意只能用"\n",用endl会刷新缓冲区,过不了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: