上一篇文章写了动态规划求解0-1背包问题,这里做一道资源分配问题强化理解,顺便分析一下动态规划算法的优化问题。
问题描述:某厂根据计划安排,拟将n台相同的设备分配给m个车间,各车间获得这种设备后,可以为国家提供盈利Ci j(i台设备提供给j号车间将得到的利润,1≤i≤n,1≤j≤m) 。问如何分配,才使国家得到最大的盈利?
分析递推公式:
前 i 台设备分配给前 j 个车间,考虑当前第 j 个车间的情况,假设第 j 个车间分配了 k(0 <= k <= i) 个设备,剩下的 i - k 台设备要分给前 j - 1 个车间,此时前 j 个车间利润为p[i][j] = p[i - k][j - 1] + c[k][j]
,遍历k的情况可取到最大利润,故有下面公式
其中0<=k<=i,1<=i<=n,1<=j<=m
代码如下:
int i, j, k;
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
for (k = 0; k <= i; k++)//i代表了设备数目
if ((p[k][j - 1] + c[i - k][j]) &g