跳转至

06

过去的几个月一直在忙于研究生的事务只能现在事后追忆了

Rank Author Solved Penalty 1001 28/662 1002 34/1357 1003 4/20 1004 6/25 1005 14/403 1006 890/3051 1007 330/2765 1008 209/345 1009 448/2271 1010 546/1652 1011 96/155 1012 718/2228
300 team1157 四川大学 4 15:18:47 (-3) 00:48:47 (-2) 03:42:36 (-4) 02:35:57 (-1) 04:51:27 (-3)

1001 Multiply 2 Divide 2

有一个长度为 \(n\) 的序列 \(a\)

在一次操作中,可以选择一个数 \(a_i\),将其变为 \(a_i \cdot 2\) 或者 \(\left\lfloor \frac{a_i}{2} \right\rfloor\)

求将该序列变为一个不下降序列的最小操作次数。

\(1 \le n \le 10^5\)\(1\le a_i \le 10^5\)


既然可以对同一个数字多次操作,这些操作的顺序一定是先除后乘。

注意到 \(a_i \le 10^5\),令 \(m = 10^5\) 为值域上界。

可以有一个简单的 \(dp\):设 \(f_{i,j,k}\) 表示前 \(i\) 个数不下降,第 \(i\) 个数除了 \(j\) 次后乘了 \(k\) 次的最小操作次数。第二维在 \(\log(m) < 17\),第三维在 \(200\) 左右,时间复杂度过高。但也就能想到这里了……

1002 Hack of Multiply 2 Divide 2


最后更新: 2023-01-31