• Dynamic Programming(动态规划)


      钢材分段问题

    #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不同长度的价格。

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

  • 相关阅读:
    jcmd命令
    IDEA运行时报错“类文件具有错误的版本 55.0, 应为 52.0”的解决方法
    Java监控工具
    jmap命令
    jstack命令
    jstat命令
    Windows系统环境变量
    Java Mission Control远程连接JVM
    pip安装cv2报错
    IDEA生成jar文件
  • 原文地址:https://www.cnblogs.com/darkchii/p/8137464.html
Copyright © 2020-2023  润新知