思路
题目要求最终的 a 数组中每个数都必须在 b 中出现过,且 a 数组最终是一个单调不降的数组,所以可以考虑确定 a 数组中最大的值,即第 n 个数的最终值。
状态定义
考虑 dp[i][j] 表示 a 的第 i 个数为 j ,前 i 个数是单调不降的最小操作次数。
状态转移
- 第 i-1 个数为 j:dp[i][j] = dp[i - 1][j] + abs(a[i]-j)
- 第 i-1 个数为 j-1 :dp[i][j] = dp[i - 1][j - 2] + abs(a[i]-j)
- 第 i-1 个数为 j-2 :dp[i][j] = dp[i - 1][j - 1] + abs(a[i]-j)
P1795.第3题-操作数
小苯有一个长度为n的数组 a,小红有一个长度为m的数组 b
小苯希望对a中的元素进行一些变换,使得a的所有元素都在b中出现过。具体的,他可以做任意如下操作:
- 选择i(1≤i≤n),令ai=ai+1或ai=ai−1.
小苯想在变换后,同时又能使得a单调不降,他想知道他最少需要操作多少次,请你帮帮他吧。
输入描述
输入包含三行。第一行两个正整数n,m(1≤n,m≤2×103),分别表示a和b的长度。
第二行n个正整数ai(1≤ai≤109),表示a数组初始时所有的元素。
第三行m个正整数bi(1≤bi≤109),表示b数组的所有元素。
输出描述
输出一个整数,表示最少操作次数
样例1
输入
5 4
3 5 3 8 10
1 2 3 4
输出
12
样例2
输入
5 3
1 2 3 3 3
1 2 3
输出
0