lightoj 1265 Island of Survival 概率

这题我心里最承认的做法是dp[i][j]表示i个老虎,j个鹿的最大存活概率。然后推下转移方程,并不难推。下面这个博客就是这么做的。

https://blog.csdn.net/qq_36346262/article/details/77970325

但是实际上,这个做法边界判断有点多,感觉不优美,于是看了眼题解,发现鹿没用。

这个直观上我是不理解的,我觉得鹿可以帮人挡老虎,为什么没有用。但仔细想,人最后能不能活下来,取决于老虎们的自相残杀。但鹿不会影响到老虎的自相残杀。所以也能算解释一波。

这样子这个题就很简单了,老虎为奇数,肯定不行。老虎为偶数,我们就靠把人第一次没死,第二次没死...最后一次还没死的概率连乘起来。

(C(2,t) / C(2,t + 1)) * (C(2,t - 2) / C(2,t - 1)) ....* (C(2,2) / C(2,3))这个式子化简下就是1 / (t + 1)了。

然后发现了个语言基础的问题,用%lf输出0是会有问题的,需要写0.0。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int T,cas,n,m;
 5 int main()
 6 {
 7     for (scanf("%d",&T);T != 0;T--)
 8     {
 9         scanf("%d%d",&n,&m);
10         if (n & 1)
11         {
12             printf("Case %d: %.6lf\n",++cas,0.0);
13             continue;
14         }
15         printf("Case %d: %.6lf\n",++cas,1.0 / (n + 1));
16     }
17     return 0;
18 }

 

posted @ 2019-08-26 19:50  IAT14  阅读(168)  评论(0编辑  收藏  举报