设$f[i][j]$表示$hp$为$i$,在$j$点的概率,$d[i]$表示$i$的度数,$w[i]$表示经过$i$点要扣掉的血量. 对于$j$到$k$这条边,$f[i-w[k]][k]+=\frac{f[i][j]}{d[j]}$. 若$w[k]>0$,则直接将贡献加给$f[i-w[k]][k]$,否则加入转移矩阵$G$. 对于当前层,有$G\times f'[i]=f[i]$,即$f'[i]=G^{-1}\times f[i]$,对$G$求出逆矩阵即可. 时间复杂度$O(n^3+n^2hp)…