zoukankan      html  css  js  c++  java
  • 动态规划

    问题

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

    递推式

    代码

    //求不相邻的最大数之和
    #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;
    }
  • 相关阅读:
    微信运营
    1.数据库&SQL语言
    16.线程
    15.IO流
    14.异常
    13.集合
    12.常用类
    11.String类-StringBuffer类、StringBuilder类
    10.Object类-包装类-内部类
    9.接口
  • 原文地址:https://www.cnblogs.com/gzu_zb/p/11398276.html
Copyright © 2011-2022 走看看