poj 1189 DP

来源:互联网 发布:eterm放大软件 编辑:程序博客网 时间:2024/05/28 15:07

我觉得有一种情况 网上代码没考虑  但是可以AC  poj数据很弱:

5 3

*

*  *

*  *  *

*  *  *  *

.   .   .  .  .

这样算出来每个洞里的概率都为0 应该是错的  因为有个方程 dp[i+2][j+1]+=dp[i][j]; 会忽略已经掉到洞里了。

#include<cstdio>#include<cstring>long long gcd(long long a,long long b){return b==0?a:gcd(b,a%b);}long long dp[55][55];int main(){int n,m;char str[60][60],ch;scanf("%d%d",&n,&m);getchar(); for(int i=1;i<=n;i++){int tot=1;while((ch=getchar())!='\n'){if(ch=='*'||ch=='.'){str[i][tot]=ch;tot++;}}}dp[1][1]=1LL<<n;for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){if(str[i][j]=='*'){dp[i+1][j]+=dp[i][j]>>1;dp[i+1][j+1]+=dp[i][j]>>1;}else{if(i==n){  dp[i+1][j+1]+=dp[i][j]>>1;  dp[i+1][j]+=dp[i][j]>>1;    }    else    dp[i+2][j+1]+=dp[i][j];}}}long long int res=gcd(1LL<<n,dp[n+1][m+1]);printf("%lld/%lld\n",dp[n+1][m+1]/res,(1LL<<n)/res);return 0;}


0 0
原创粉丝点击