吐槽
怎么管的这么怂,3个人代码里(除了我)2个AI,1个复制别人的AI代码。
题目大意
给你n块石头,每次跳跃跳下一个或者空一格,跳一次的代价是 abs(ai−aj)\text{abs}(a_i - a_j)abs(ai −aj ) 其中 i,ji,ji,j 分别指起点位置和重点位置。要求你求出跳到第 nnn 块石头的最小代价。
思路
本题考虑dp。
设 dpidp_idpi 为跳到第 iii 块石头的最小值。同时我们发现,想到达第 iii 石头,必须从 i−1i - 1i−1 或 i−2i - 2i−2到达。因此 dpidp_idpi 的值也一定只由 dpi−1,dpi−2dp_{i - 1} , dp_{i - 2}dpi−1 ,dpi−2 决定。很快我们就能发现转移方程:
dpi=min(dpi−1+abs(ai−ai−1),dpi−2+abs(ai−ai−2))dp_i = \min(dp_{i - 1} + \text{abs}(a_i - a_{i - 1}) , dp_{i - 2} + \text{abs}(a_i - a_{i - 2})) dpi =min(dpi−1 +abs(ai −ai−1 ),dpi−2 +abs(ai −ai−2 ))
最后输出 dpndp_ndpn 即可。
当然可以使用滚动数组(不给代码自己写)。