一道比较不错的 DP。
设 f i f_i fi 表示当前字符串长为 i i i 时的最小代价,发现这道题麻烦的地方在于 f i f_i fi 可以从 f i + 1 f_{i+1} fi+1 的地方转移过来。
分类讨论一下:
i i i 为偶数:
i
i
i 为偶数时
f
i
f_i
fi 能从
f
i
−
1
,
f
i
2
,
f
i
+
1
f_{i-1},f_{\frac{i}{2}},f_{i+1}
fi−1,f2i,fi+1 三个点转移过来,但是
f
i
+
1
f_{i+1}
fi+1 的转移路程是
?
→
f
i
+
2
2
→
f
i
+
2
→
f
i
+
1
→
f
i
? \to f_{\frac{i+2}{2}} \to f_{i+2} \to f_{i+1} \to f_{i}
?→f2i+2→fi+2→fi+1→fi
,总代价是
y
+
2
x
y+2x
y+2x,这显然不如
?
→
f
i
+
2
2
→
f
i
2
→
f
i
? \to f_{\frac{i+2}{2}} \to f_{\frac{i}{2}} \to f_{i}
?→f2i+2→f2i→fi 更优,总代价是
y
+
x
y+x
y+x。
所以 i i i 为偶数的转移方程是 f i = min { f i − 1 + x , f i 2 + y } f_{i}=\min\{f_{i-1}+x,f_{\frac{i}{2}}+y\} fi=min{fi−1+x,f2i+y}。
i i i 为奇数:
i i i 为奇数时 f i f_i fi 能从 f i − 1 , f i + 1 f_{i-1},f_{i+1} fi−1,fi+1 转移过来,接下来讨论 f i + 1 f_{i+1} fi+1 的转移思路。
显然 f i + 1 f_{i+1} fi+1 不能从 f i f_{i} fi 转移,于是只能从 f i + 2 , f i + 1 2 f_{i+2},f_{\frac{i+1}{2}} fi+2,f2i+1 转移,发现 f i + 2 f_{i+2} fi+2 又是个奇数,因此如果从 f i + 2 f_{i+2} fi+2 转移的话路径只能是这样:
? → f i + 1 2 → f i + 3 2 → f i + 3 → f i + 2 → f i + 1 → f i ? \to f_{\frac{i+1}{2}} \to f_{\frac{i+3}{2}} \to f_{i+3} \to f_{i+2} \to f_{i+1} \to f_{i} ?→f2i+1→f2i+3→fi+3→fi+2→fi+1→fi
总代价是 4 x + y 4x+y 4x+y,显然不如从 f i + 1 f_{i+1} fi+1 的转移路径 ? → f i + 1 2 → f i + 1 → f i ? \to f_{\frac{i+1}{2}} \to f_{i+1} \to f_{i} ?→f2i+1→fi+1→fi,总代价是 y + x y+x y+x。
所以 i i i 为奇数的转移方程是 f i = min { f i − 1 + x , f i + 1 2 + x + y } f_{i}=\min\{f_{i-1}+x,f_{\frac{i+1}{2}}+x+y\} fi=min{fi−1+x,f2i+1+x+y}。
所以最后的方程就是上面两个式子综合一下就好了。