题目
题解
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]);
}