ZOJ 3640 Help Me Escape 概率DP

本文介绍了一个基于动态规划(DP)算法解决的有趣问题:吸血鬼进入不同能力需求的洞穴挑战。文章详细展示了如何通过条件期望的方法来解决这个问题,并给出了一段C++实现代码作为参考。

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

做法:运用条件期望即可。当吸血鬼的能力为x时

dp[x]=1+p[i]*dp[x+c[i]] {x<=c[i]}

dp[x]=t[i]*p[i];{x>c[i]}

注意有个小陷阱就是一开始吸血鬼的能力就比所有洞洞所需要的能力的和大的多的情况。

#include<cstdio>
#include<cstring>
#include<cmath>
#define max(a,b) a>b?a:b
const int LMT=20003;
const double is=0.5*(1+sqrt(5));
double dp[LMT];
int have[102];
int main()
{
	int i,n,f,j,all;
	while(~scanf("%d%d",&n,&f))
	{
		memset(dp,0,sizeof(dp));
		all=-1;
		for(i=0;i<n;i++)
		{
			scanf("%d",&have[i]);
			all=max(all,have[i]);
		}
		all<<=1;
		for(i=max(all,f);i>=f;i--)
		{
			for(j=0;j<n;j++)
				if(i>have[j])dp[i]+=(int)(is*have[j]*have[j]);
				else dp[i]+=1+dp[i+have[j]];
					dp[i]/=n;
		}
		printf("%.3lf\n",dp[f]);
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值