题意:
。。。
思路:
E[i]
为当前分数为i时,到游戏结束时掷骰次数的期望。
E[i]=∑Pk∗Ei+k+P0∗E0,P0=1/(k1+k2+k3)
我们要求的是E[0],,边界是
E[j]=0,j>n
假设E[i] = ai * E[0] + bi
每次可以把递推式(1)中的E[i+k]替换成
ai+k∗E0+bi+k
然后求得ai和bi
最后求解,E[0] = b0/(1-a0)
更详细的题解
int n, k1, k2, k3, aa, bb, cc;
double a[521], b[521], p[20], p0;
double solve() {
int ks = k1 + k2 + k3;
fill(a, a+520, 0);fill(b, b+520, 0);
urep(i, n, 0) {
int last = min (i+ks, n);
rep(j, 3, ks) {
a[i] += p[j] * a[i+j];
b[i] += p[j] * b[i+j];
}
a[i] += p0, b[i] += 1;
}
return b[0]/(1-a[0]);
}