[每日 C] Add Zeros
前言
作为每日一 \(\rm{C}\) 的开门题, 看看能不能自己打出来
以后体育课前就用来做每日一 \(\rm{C}\) , 其他时间正常分配
难度要求 \(1400\) 左右吧, 高点更好
思路
这种有点神秘的形式考虑对原数组做变换, 但是这是后事
你发现 \(a_i=|a|+1−i\) 等价于 \(a_i = |a| - (i - 1)\) , 容易发现 \(a_i = 0\) 时不可能满足此性质
考虑把原数组中的 \(a_i \to a_i + (i - 1)\) , 然后形式等价于 \(a_i = |a|\) , 会好做一点
考虑现在的问题, 对于一个长为 \(n\) 的序列 \(a\) , 如果有 \(a_i = |a|\) 的位置, 你可以选择将 \(|a| \to |a| + (i - 1)\) , 然后继续, 求最后 \(|a|\) 的最大值
这个东西可以记忆化搜索即可
具体的, 令 \(dp_i\) 表示是否可能使 \(|a|\) 达到 \(i\) , 容易转移
关于复杂度的证明: 你发现不可能存在环, 所以图上的复杂度是 \(\mathcal{O} (n)\) 的
总结
善于把操作丢到图上处理
另外一种理解方式是 \(\rm{dp}\) , 反正就是无敌

浙公网安备 33010602011771号