博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1189
阅读量:6268 次
发布时间:2019-06-22

本文共 1326 字,大约阅读时间需要 4 分钟。

题意:在一块木板上,钉上钉子,排布成等边三角形。一个球从顶部开始,自由下落。每碰到一个钉子以后,等概率地向两边继续滚。现从该等边三角形的钉子中,拔去其中某些钉子。求这个球从顶部开始下落,滚到底部某个格子的概率。
思路:DP模拟。逐步递推,分别计算每一层,滚到每一个口的概率。最后一层每个口的概率,就是对应底部每个格子的概率。每一个口的概率,若遇到一个钉子,则除以2后就是下一层对应两个口的概率;若没遇到钉子,则直接等于再下层的对应入口,即直接落下。一开始的初值,就是2^层数,即全部都是钉子时,第一个格子对应的概率。
1 #include 
2 #include
3 #include
4 using namespace std; 5 6 __int64 gcd(__int64 a , __int64 b) 7 { 8 return b==0?a:gcd(b,a%b); 9 }10 __int64 dp[55][55];11 char map[55][55];12 char s[55];13 int main()14 {15 int m,n;16 cin>>n>>m;17 for(int i=1;i<=n;i++)//因为空格可以无限多个,所以最好当做字符串来输入18 {19 for(int j=1;j<=i;j++)20 {21 cin>>s;22 map[i][j]=s[0];23 }24 }25 dp[1][1]=1ll<
>1;34 dp[i+1][j+1]+=dp[i][j]>>1;35 }36 else37 {38 dp[i+2][j+1]+=dp[i][j];39 }40 }41 }42 __int64 ans=dp[n+1][m+1];43 __int64 sum=0;44 for(int i=1;i<=n+1;i++)45 {46 sum+=dp[n+1][i];47 }48 __int64 k;49 k=gcd(sum,ans);50 printf("%I64d/%I64d\n",ans/k,sum/k);51 return 0;52 }

其中出现了一个小错误害了我找了半天的错误,结果出在

dp[1][1]=1<
<

转载于:https://www.cnblogs.com/devil-91/archive/2012/08/18/2645158.html

你可能感兴趣的文章
【转】C#解析Json Newtonsoft.Json
查看>>
macports的安装及常用命令
查看>>
(转)使用C#开发ActiveX控件
查看>>
spring mvc 基于注解 配置默认 handlermapping
查看>>
半小时学会上传本地项目到github
查看>>
Android学Jni/Ndk 开发记录(一)
查看>>
Linux Tcl和Expect的安装
查看>>
WPF中的依赖项属性(转)
查看>>
linux防火墙相关 iptables
查看>>
最简单的单例模式
查看>>
JPopupMenu的使用以及JPopupMenu中子组件的事件处理
查看>>
从反汇编的角度看引用和指针的区别
查看>>
拓马长枪定乾坤
查看>>
UIProgressView的详细使用
查看>>
Silverlight实用窍门系列:70.Silverlight的视觉状态组VisualStateGroup
查看>>
照片筛选与上传功能
查看>>
Hello ZED
查看>>
常见web攻击方式
查看>>
hdu 4472
查看>>
oracle存储过程中is和as区别
查看>>