LightOJ 1265 (概率DP)

本文通过一个有趣的数学问题探讨了猎人在充满老虎和鹿的环境中如何才能最大可能地生存下来。文章给出了详细的概率计算过程,并附带了一个C++实现的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://lightoj.com/volume_showproblem.php?problem=1265

感觉蛮好玩的,和鹿相遇的时候,杀还是不杀呢?

当鹿越来越少的时候,你遇到老虎被杀的概率就会增大,但是老虎遇到老虎相互残杀的概率也会增大。

而题目也没说你杀鹿的概率是多少啊?

完全没有头绪?其实仔细想想,你存活的概率只和老虎有关。

因为老虎是成对死的,所以如果老虎数量是奇数,总有一天会遇到老虎,必死无疑。

如果老虎数量是偶数就算概率

因为概率只和老虎有关,所以只考虑,存活下来就是要每天都是两只老虎相遇

所以设当天的老虎数是x

那么当天是老虎与老虎相遇的概率p =  x*(x-1)/(x*(x+1)) = (x-1)/(x+1)   

这样按每天死两只老虎的概率递推(乘法原理)下去,直到老虎全部死光即存活

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
#define mem(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;

int main()
{
	int T;cin>>T;int kas = 0;
	while (T--)
	{
		int t,d;
		cin>>t>>d;
		printf("Case %d: ",++kas);
		if (t&1) printf("%.7f\n",0.0);
		else 
		{
			int x = t;
			double p = 1.0;
			while(x)
			{
				p*=(x*1.0-1.0)/(1.0*x+1.0);
				x -= 2;
			} 
			printf("%.7f\n",p);
		}
	}  
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值