2 条题解
信息
- ID
- 161
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 20
- 已通过
- 5
- 上传者
前置知识:使用动态规划求解最长上升子序列。
首先一个合法序列需要满足的要求其实就是 ai≥ai−1,bi≥bi−1,因此这很像最长上升子序列,回忆一下,最长上升子序列的状态定义是 dp[x] 表示以 x 处的数字结尾的最长上升子序列的长度。
我们想类似定义dp数组,但发现还有一个交换操作,但其实交换也并不麻烦、只会多出每个位置一个状态,即我们可以定义:dp[x][0/1] 表示以位置 x 处作为结尾、位置 x 处是否交换(第二维为 1 表示交换)时所对应的最长合法序列。转移时假设当前位置为 i,枚举上一个位置 j,如果能把 ai,bi(或bi,ai)接到 aj,bj(或bj,aj)后面,则可以花费(i−j−1)c1来删除两者中间的那段。