• 成本与利润最大化问题


    资源分配问题的动态规划解法

    假设工程项目总数为 n,可利用的资源份额总数为 m,给每项工程投入的资
    源份额数不同时,所获得的利润也不同。要我们怎么分配资源以获取最大利润

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 50;
    int m, n;
    int G[maxn+1][maxn+1];
    // 需要两个记忆化数组
    int dp[maxn+1][maxn+1];  // 表示给前i个项目分配j个资源的最大利润
    int d[maxn+1][maxn+1];  // 表示使得dp[i][j]最大时,第i个项目分配的资源数
    
    void solve()
    {
        //初始化
        for(int i = 1; i <= m; ++i) {
            dp[1][i] = G[1][i];
            d[1][i] = i;
        }
    
        for(int i = 2; i <= n; ++i) {
            for(int j = 0; j <= m; ++j) {
                for(int k = 0; k <= j; ++k) {
                    int t = dp[i-1][k] + G[i][j-k];
                    if(dp[i][j] < t) {
                        dp[i][j] = t;
                        d[i][j] = j - k;
                    }
                }
            }
        }
        int cnt = m;
        for(int i = n; i >= 1; --i) {
            printf("the %d project allocate %d resources
    ", i, d[i][cnt]);
            cnt -= d[i][cnt];
        }
        cout << "The biggest profits: " << dp[n][m] << endl;
    }
    int main()
    {
        freopen("input.txt", "r", stdin);
        cin >> n >> m;
        // 利润表
        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; ++j) {
                cin >> G[i][j];
            }
        }
        solve();
        return 0;
    }
    

    注:复试题

  • 相关阅读:
    Django Form组件实例:登录界面[Form表单提交,Ajax提交]
    开张啦!
    CART剪枝
    TensorFlow全新的数据读取方式:Dataset API入门教程
    关于神经网络中的padding
    cs231n(一)
    协方差与pearson相关系数
    Auto Encoder
    markdown公式编辑参考
    Python使用日常
  • 原文地址:https://www.cnblogs.com/codemeta-2020/p/14582961.html
Copyright © 2020-2023  润新知