码迷,mamicode.com
首页 > 其他好文 > 详细

Discovering Gold LightOJ - 1030 || 概率与期望求法区别

时间:2017-10-28 14:33:42      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:algorithm   sum   遇到   details   http   end   cas   +=   表示   

 1 #include<cstdio>//wrong_codes
 2 #include<algorithm>
 3 using namespace std;
 4 double ans[110],anss;
 5 int a[110],T,TT,n,endd;
 6 int main()
 7 {
 8     int i,j;
 9     scanf("%d",&T);
10     for(TT=1;TT<=T;TT++)
11     {
12         scanf("%d",&n);
13         for(i=1;i<=n;i++)
14             scanf("%d",&a[i]);
15         for(i=1;i<=n;i++)
16             ans[i]=0;
17         anss=0;
18         ans[1]=1;
19         for(i=1;i<=n;i++)
20         {
21             endd=n-i<6?n-i:6;
22             for(j=1;j<=endd;j++)
23                 ans[i+j]+=ans[i]/endd;
24             anss+=a[i]*ans[i];
25         }
26         printf("Case %d: %.9lf\n",TT,anss);
27     }
28     return 0;
29 }

注意:虽然以上的代码能通过,但是...下次还是不要用了。

代码思路就是求出到达每一格的概率,然后每一格的金子乘上到达这一格的概率之和就是总期望。

但是,这样做的时候会遇到很多难以理解的问题。比如以下一个看起来同样有着合理的想法的方法:ans[i]表示到达i格拿到的金币期望,再做一些很显然的递推。这个就是错误的。

顺推的话,相比倒推,更容易出错/遗漏/...。

 1 #include<cstdio>//wrong_codes
 2 #include<algorithm>
 3 using namespace std;
 4 double ans[110];
 5 int a[110],T,TT,n;
 6 int main()
 7 {
 8     int i,j;
 9     scanf("%d",&T);
10     for(TT=1;TT<=T;TT++)
11     {
12         scanf("%d",&n);
13         for(i=1;i<=n;i++)
14             scanf("%d",&a[i]);
15         for(i=1;i<=n;i++)
16             ans[i]=0;
17         ans[1]=a[1];
18         for(i=2;i<=min(n,6);i++)
19         {
20             for(j=1;j<i;j++)
21                 ans[i]+=ans[j];
22             ans[i]/=(i-1);
23             ans[i]+=(double)a[i];
24         }
25         for(i=min(n,6)+1;i<=n;i++)
26         {
27             for(j=1;j<=6;j++)
28                 ans[i]+=ans[i-j];
29             ans[i]/=6;
30             ans[i]+=(double)a[i];
31         }
32         printf("Case %d: %.9lf\n",TT,ans[n]);
33     }
34     return 0;
35 }

正确的做法就是:概率正推,期望倒推。http://blog.csdn.net/nameofcsdn/article/details/52082746

ans[i]表示从i格出发得到gold的期望。ans[i]=sum{ans[i+p]}(1<=p<=6)+a[i]

Discovering Gold LightOJ - 1030 || 概率与期望求法区别

标签:algorithm   sum   遇到   details   http   end   cas   +=   表示   

原文地址:http://www.cnblogs.com/hehe54321/p/loj-1030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!