最小和(sicily算法)

来源:互联网 发布:淘宝商品详情页面html 编辑:程序博客网 时间:2024/06/14 04:17

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 programmingint 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.csdn.net/u012247338/article/details/73825197

原创粉丝点击