ADT - DP(动态规划)

Posted darkchii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ADT - DP(动态规划)相关的知识,希望对你有一定的参考价值。

  钢材分段问题

#include<iostream>
#include<vector>
using namespace std;

class Solution {
public:
    int Bottom_To_Up_Cut_Rod(vector<int> p, int n) {
        vector<int> r(n);
        r[0] = 0;
        int q = -65533;

        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= i; j++) {
                q = q > (p[j] + r[i - j]) ? q : (p[j] + r[i - j]);
            }
            r[i] = q;
        }

        return r[n];
    }
};

int main() {
    int nums[] = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
    int len = (int)sizeof(nums)/sizeof(int);
    vector<int> p(len);
    Solution so;

    for(int i = 0; i < len; i++) {
        p[i] = nums[i];
    }

    cout << "请输入钢材的长度:";
    cin >> len;
    cout << "最大收益为:" << so.Bottom_To_Up_Cut_Rod(p, len) << endl;

    return 0;
}

  上面代码中的 nums[] 中的数据代表的含义是指钢材长度从0~10不同长度的价格。

  一般动态规划用于求解一类最优解(一般可归类为求解最大值或最小值)的问题,这里以《算法导论》给的这个例子为引子作为深入对算法等的学习。代码很简洁明了,所以我就不多解释了。

以上是关于ADT - DP(动态规划)的主要内容,如果未能解决你的问题,请参考以下文章

动态规划---状压dp

51nod 1021 石子归并 (动态规划 简单代码)

动态规划算法(Dynamic Programming,简称 DP)

动态规划_计数类dp_数位统计dp_状态压缩dp_树形dp_记忆化搜索

动态规划-数位dp

[程序员代码面试指南]递归和动态规划-最长公共子串问题(DP,LCST)