1.题目要求
从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求对于每个i(0<=i
2.算法分析
动态规划,对于n个数的最小和,需要比较三种情况:(A[i-1], a[i] + A[i-1], a[i] + A[i - 2]),取三者中最小的一个,但是对于A[i], A[i] = min(A[i] + A[i - 1], A[i] + A[i - 2]);
3.代码实现
#include <iostream>
#include <vector>
using namespace std;
// dynamic programming
int min(int a, int b) {
return a < b ? a:b;
}
class Solution {
public:
int minSum(vector<int>& A) {
int n = A.size();
if (n == 0) return 0;
int result = A[0];
for (int i = 0; i < n; ++i) {
if (i < 2) {
result = min(A[i], result);
} else {
A[i] = min(A[i] + A[i - 1], A[i] + A[i - 2]);
result = min(A[i-1], A[i]);
}
}
return result;
}
};
int main() {
int n;
cin >> n;
vector<int> data;
int num;
for (int i = 0; i < n; ++i) {
cin >> num;
data.push_back(num);
}
cout << "result: " << minSum(data) << endl;
return 0;
}
同样的,有很相似的题目,但是求解的是最大和
参考链接:http://blog.youkuaiyun.com/u012247338/article/details/73825197