1. 程式人生 > >[UOJ#340][清華集訓2017]小 Y 和恐怖的奴隸主(期望 DP + 矩陣乘法)

[UOJ#340][清華集訓2017]小 Y 和恐怖的奴隸主(期望 DP + 矩陣乘法)

Address

洛谷P4007
UOJ#340
LOJ#2325

Solution

難道 m m k k 特別小,容易想到一個狀態:
f

[ i ] [ a ] [ b ] [ c
] f[i][a][b][c] 表示當前血量為 1 1 的隨從有 a a
個,血量為 2 2 的有 b b 個,血量為 3 3 的有 c c 個的情況下,發動 i i 次攻擊對 boss 造成的期望傷害。
邊界:
f [ 0 ] [ a ] [ b ] [ c ] = 0 f[0][a][b][c]=0
轉移 1 :攻擊 boss 。
f [ i ] [ a ] [ b ] [ c ] + = ( 1 + f [ i 1 ] [ a ] [ b ] [ c ] ) 1 + a + b + c f[i][a][b][c]+=\frac{(1+f[i-1][a][b][c])}{1+a+b+c}
轉移 2 :擊殺一個血量為 1 1 的隨從。
f [ i ] [ a ] [ b ] [ c ] + = f [ i 1 ] [ a 1 ] [ b ] [ c ] × a 1 + a + b + c f[i][a][b][c]+=f[i-1][a-1][b][c]\times\frac a{1+a+b+c}
轉移 3 :隨從數量達到上限時,攻擊一個血量為 2 2 的隨從。
f [ i ] [ a ] [ b ] [ c ] + = f [ i 1 ] [ a + 1 ] [ b 1 ] [ c ] × b 1 + a + b + c , a + b + c = k f[i][a][b][c]+=f[i-1][a+1][b-1][c]\times\frac b{1+a+b+c},a+b+c=k
轉移 4 :隨從數量達到上限時,攻擊一個血量為 3 3 的隨從。
f [ i ] [ a ] [ b ] [ c ] + = f [ i 1 ] [ a ] [ b + 1 ] [ c 1 ] × c 1 + a + b + c , a + b + c = k f[i][a][b][c]+=f[i-1][a][b+1][c-1]\times\frac c{1+a+b+c},a+b+c=k
轉移 5 :隨從數量未達到上限時,攻擊一個血量為 2 2 的隨從,召喚一個血量為 m m 的隨從。
(1) m = 2 m=2
f [ i ] [ a ] [ b ] [ c ] + = f [ i 1 ] [ a + 1 ] [ b ] [ c ] × b 1 + a + b + c f[i][a][b][c]+=f[i-1][a+1][b][c]\times\frac b{1+a+b+c}
(2) m = 3 m=3
f [ i ] [ a ] [ b ] [ c ] + = f [ i 1 ] [ a + 1 ] [ b 1 ] [ c + 1 ] × b 1 + a + b + c f[i][a][b][c]+=f[i-1][a+1][b-1][c+1]\times\frac b{1+a+b+c}
轉移 6 :隨從數量未達到上限時,攻擊一個血量為 3 3 的隨從,召喚一個血量為 m m 的隨從。
(1) m=3 :
f [ i ] [ a ] [ b ] [ c ] + = f [ i 1 ] [ a ] [ b + 1 ] [ c ] × c 1 + a + b + c f[i][a][b][c]+=f[i-1][a][b+1][c]\times\frac c{1+a+b+c}
轉移 5 和轉移 6 的條件為 a + b + c < k a+b+c<k
注意到 n n 非常大,遞推式是線性的,多次轉移時係數不變,可以使用矩陣乘法優化 DP 。
注意到滿足 a + b + c k a+b+c\le k 的有序三元組 ( a , b , c ) (a,b,c) 最多有 ( k + 3 3 ) \binom{k+3}3 個,
k = 8 k=8 時為 165 165