51nod 1705 七星剑

本文介绍了一种使用动态规划解决最小期望问题的方法。通过递推公式计算在不同点达到目标点的最小期望成本,适用于有成功概率及失败后退格数的游戏场景。

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

题目
题解
f [ i ] f[i] f[i]表示 i i i颗星的最小期望
从第 i − 1 i-1 i1个点转移到i,若成功概率为 p p p,失败后退 l l l格,那么
p ⋅ f [ i ] + ( 1 − p ) ⋅ f [ i − i − l ] = f [ i − 1 ] + c [ j ] p\cdot f[i]+(1-p)\cdot f[i-i-l]=f[i-1]+c[j] pf[i]+(1p)f[iil]=f[i1]+c[j]

#include<bits/stdc++.h>
using namespace std;
double c[102],f[8],p[8][102];
int l[8][102],fl,i,j,n;
int main(){
	scanf("%d",&n);
	for (i=1;i<=n;i++) scanf("%lf",&c[i]);
	for (i=1;i<=7;i++){
		fl=0;
		for (j=1;j<=n;j++) scanf("%lf",&p[i][j]),fl|=p[i][j]>1e-6;
		if (!fl){
			puts("-1");
			return 0;
		}
	}
	for (i=1;i<=7;i++)
		for (j=1;j<=n;j++) scanf("%d",&l[i][j]);
	for (i=1;i<=7;i++) f[i]=1e99;
	for (i=1;i<=7;i++)
		for (j=1;j<=n;j++)
			if (p[i][j]>1e-6) f[i]=min(f[i],(f[i-1]+c[j]-(1-p[i][j])*f[i-1-l[i][j]])/p[i][j]);
	printf("%.9lf",f[7]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值