1. 程式人生 > >ADT - DP(動態規劃)

ADT - DP(動態規劃)

urn ++ public post ott 學習 sizeof 不同 tor

  鋼材分段問題

#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(動態規劃)