动态规划求解资源分配实验目标:(1)掌握用动态规划方法求解实际问题得基本思路。(2)进一步理解动态规划方法得实质,巩固设计动态规划算法得基本步骤。实验任务:(1)设计动态规划算法求解资源分配问题,给出算法得非形式描述。 (2) 在W i n do ws环境下用 C 语言实现该算法。计算 10 个实例,每个实例中 n=3 0, m=10, Ci j 为随机产生于范围(0,1 03)内得整数。记录各实例得数据及执行结果(即最优分配方案、最优分配方案得值)、运行时间。 (3)从理论上分析算法得时间与空间复杂度,并由此解释相应得实验结果。实验设备及环境:P C;C/C++等编程语言。实验主要步骤:(1) 仔细阅读实验目得与实验任务,明确本次实验得内容;(2) 分析实验中要求求解得问题,根据动态规划得思想,得出优化方程;(3) 从问题出发,设计出相应得动态规划算法,并根据设计编写程序实现算法;(4) 设计实验数据并运行程序、记录运行得结果;(5) 分析算法得时间与空间复杂度,并由此解释释相应得实验结果;问题描述:资源分配问题 某厂根据计划安排,拟将 n 台相同得设备分配给 m 个车间,各车间获得这种设备后,可以为国家提供盈利C i j(i 台设备提供给 j 号车间将得到得利润,1≤i≤n,1≤j≤m) 。问如何分配,才使国家得到最大得盈利?1.问题分析:本问题就是一简单资源分配问题,由于具有明显得最优子结构,故可以使用动态规划求解,用状态量 f[i][j]表示用 i 台设备分配给前 j 个车间得最大获利,那么显然有f[i][j] = max{ f[k][j–1] + c[i—k][j] },0〈=k<=i.再用 p[i][j]表示获得最优解时第 j 号车间使用得设备数为 i—p[i][j],于就是从结果倒推往回求即可得到分配方案。程序实现时使用顺推,先枚举车间数,再枚举设备数,再枚举状态转移时用到得设备数,简单3重 for 循环语句即可完成.时间复杂度为 O(n^2*m),空间复杂度为O(n*m),倘若此题只需求最大获利而不必求方案,则状态量可以减少一维,空间复杂度优化为 O(n).程序代码:#i n cl u de〈st ring、h〉#in cl ude〈stdl i b、h〉#include〈time、h>#i n clude〈ioman i p、h〉#inclu d e