成本与利润最大化问题

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

假设工程项目总数为 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;
}

注:复试题

原文地址:https://www.cnblogs.com/codemeta-2020/p/14582961.html