题目大意
两队共
2n
个球员进行足球比赛,分别编号为
0
到
- 带球球员将球传给某个队友
- 带球球员被某个敌方球员截走
- 带球球员射球,有
p
的概率射中,无论是否射中,球都交给敌队
0 号球员
比赛在经过
T
秒或者某队比分到达
现给出每个人射入的概率,以及传球或被截的人。
问比赛结果为每种可能的比分的概率。
n<=100,T<=500,m<=10
分析
裸的DP
设
fi,j,Ti,k,l
为球在
i
队
只需要按照题目描述转移就可以了。
更好的DP
我们只关注得分情况,而其中的运球并没有什么卵用。不妨记一个状态
gi,j,Ti
表示
i
队开球,经过
f1−j,Ti+x,k+!j,l+j=fi,Ti,k,l⋅gi,j,x
其中
j∈[0,1],x∈[1,T−Ti]
计算主状态的总时间复杂度降到
O((TR)2)
至于
g
的转移也不难,不妨记
gi,j,Ti+1=∑n−1k=0hi,j,k,Ti⋅pj,k
其中
pj,k
表示
j
队
计算
g
数组的总时间复杂度是
那么剩下的就是如何计算
h
的问题了,按题目描述转移即可。
其中
p
和
h
的转移总时间复杂度是
问题到这基本上就解决了。
注意一个小问题,我们还需要维护一个
delayi,T
表示
i
队开球后一直没有进球过了
其中还有一个技巧就是把设不中视为被敌方
0
<script type="math/tex" id="MathJax-Element-301">0</script>号截球。
大致上就这样了。