Description
从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求对于每个i(0<= i < N-1),A[i]和A[i+1]至少选一个数,求能选出的最小和.
1 <= N <= 100000, 1 <= A[i] <= 1000
请为下面的Solution类实现解决上述问题的函数minSum,函数参数A是给出的数列,返回值为所求的最小和.
class Solution {
public:
int minSum(vector<int>& A) {
}
};
例1:A = {2, 5, 2},答案为4.
例2:A = {2, 5, 4},答案为5.
这个问题可用动态规划法来求解。对于数组内的一个数来说,如果选择它,则它前面的数可选可不选;如果不选择它,则它前面的数必须选。
我们用 dp[n][0] 表示在第n个数不被选的情况下,前n个数可得到的最小和;用 dp[n][1] 表示在第n个数被选的情况下,前n个数可得到的最小和。由此写出递推式: