动态规划 机器分配

问题描述:

机器分配(HNOI’95)
一、问题描述
总公司拥有高效生产设备 M 台,准备分给下属的 N 个公司。各分公司若获得这些设备,
可以为国家提供一定的盈利。问:如何分配这 M 台设备才能使国家得到的盈利最大?求出
最大盈利值。其中 M《=15,N〈=10。分配原则:每个公司有权获得任意数目的设备,但总
台数不得超过总设备数 M。保存数据的文件名从键盘输入。
数据文件格式为:第一行保存两个数,第一个数是设备台数 M,第二个数是分公司数 N。
接下来是一个 M*N 的矩阵,表明了第 I 个公司分配 J 台机器的盈利。


个人思想记录:(错误)

    拿到题我还是老思维,就是动态规划是由递归演变而来的,就是记录递归的中间过程,其实方法还是递归搜索。

我就想 M台机器嘛,可定每次递归选择一个公司把这台机器分给这个公司,这样就有M次递归,也就是有M个阶段。

让公司个数为状态,在我的想法里面就是一个是阶段另一个肯定是状态了,但是我的响了一下中间过程没法推,

还有一个问题就是我们中间记录什么的问题。自己总是在这些问题中纠缠。这些想法行不通。所以我就去看了答案。


解题思路:

我们可以把状态设置为个数这样我们就能考虑到因为个数不同而价值不同计算了 , 我们把公司设置为阶段。我们设置数组为d[i][j]表示前i个公司用j个机器。我们用 d[i][j]来记录到i阶段的j台机器时价值的最大值。

如何的到d[i][j]呢 , 我们可以从d[i-1]行中找,因为机器数是j个如果在第j个公司放x(x


这样子地推应该很容易就能得到结果吧。。。。

如果是一层一层的递归

先选1公司的 1 2 3 4 5 6.、。。。n种

再从1中选一种情况 在开始1 2 3 4 5 。。。。n的递归

知道M个公司全部递归完成 。

这里面存在个数的限制 比如最多有 6台机器 你第一次选6 第二次再选什么都会超过的,还有正好6台机器你少了也不行。要求加上个数的限制 相应的在上面的表示就是j-k和k 正好组成了j台机器。


你可能感兴趣的:(ACM,摸索)