动态规划

问题:出售长度为i的钢条,利益不同,问如何切割钢条如何切割获得利润最大

#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
//返回的是长度为i的最大利润
vector<int> MaxEarn(vector<int>p, int length, vector<int>s)
{
    vector<int> r(length+1, 0);//初始化收益为0
    for (int j = 1; j <= length; j++)//j代表了在不同长度下的最优分割
    {
        int q = 0;//代表收益
        for (int i = 1; i <= j; i++)
        {
            if (q < p[i] + r[j - i])//注意下标,当i=j时代表了
            {                      //q与p[i]即不切割的情况下
                q = p[i] + r[j - i];//j=i+j-i代表总长度为j
                s.push_back(i);//分割方法保存,即切割的i长度
            }
        }
        r[j] = q;//即长度为j的最大价值

    }
    return r;
}
int main()
{
    //注意0表示0m。。
    vector<int>p = { 0,1,5,8,9,10,17,17,20,24,30 };
    vector<int>r, s;
    r = MaxEarn(p, 10, s);
    for (auto c : r)
        cout << c << endl;
}

你可能感兴趣的:(C++,动态规划)