动态规划

 

问题

         给出一个数组,求不相邻的数之和最大

递推式

代码

//求不相邻的最大数之和
#include <iostream>
using namespace std;
#define max(a,b) (a > b ? a : b)

int arr[] = {1, 2, 4, 1, 7, 8, 3};

//递归求解
int rec_opt(int i) {
    if(i == 0) {
        return arr[0];
    }
    else if(i == 1) {
        return max(arr[0], arr[1]);
    }
    else {
        int A = arr[i] + rec_opt(i -2);
        int B = rec_opt(i - 1);
        return max(A, B);
    }
}

//非递归求解
int dp_opt() {
    int len_arr = sizeof(arr) / sizeof(int);
    //此数组用存放最大值的
    int *opt = new int[len_arr];
    opt[0] = arr[0];
    opt[1] = max(arr[0], arr[1]);
    for(int i = 2; i < len_arr; i++) {
        int A = opt[i - 2] + arr[i];
        int B = opt[i - 1];
        opt[i] = max(A, B);
    }
    return opt[len_arr - 1];
}

int main() {
    cout << rec_opt(6) << endl;
    cout << dp_opt() << endl;
    return 0;
}

 

posted @ 2019-08-23 09:56  gzu_zb  阅读(340)  评论(0编辑  收藏  举报