1.问题
设 m 元钱,n 项投资,函数 表示将 x 元投入第 i 项项目所产生的效益,i=1,2,…,n.
问:如何分配这 m 元钱,使得投资的总效益最高?
如给出上图关系表。
2.解析
Fk (x) 表示 x 万元投给前 k 个项目的最大效益,k=1,2,…,n,x=1,2,…,m
递推方程:Fk (x) = max {f k (x k ) + Fk -1 (x x k )},-k 2, 3,…, n
边界条件:F1 (x) = f1 (x), Fk (0) = 0, k = 1, 2,…, n
说明:第 k 步,前后共分配 x 万元。
使用这个地推方程进行计算,这里不对此进行证明。
3.设计
For k = 1, 2, 3,…, n // k 个项目共分配 x 万元
For x= 1,2,3, . . .m // k 个项目共分配 x万元
For x = 0,1, 2, 3,…, x // 第k 个项目分配 Xk万元
实例:
1)F1 (x) ,k=1,只有一个项目
x=1: F1(1) = f1 (1) =11 x1 ( x) = x, x =1,2,3,4,5
x=2: F1 (2) = f1 (2) =12
x=3: F1(3) = f1 (3) =13
x=4: F1 (4) = f1 (4) =14
x=5: F1(5) = f1 (5) =15
2)F2 (x),k=2,有两个项目 l x=1,总共分配 1 万元
x=1, xk =0: f 2 (0) + F1 (1)
x=1, xk =1: f 2 (1) + F1 (0)
F2 (1) = max{f 2 (0) + F1 (1), f 2 (1) + F1 (0)} = max{0 + 11, 0 + 0} = 11
x2 (1) = 0
以此类推
分析
复杂度O(nm^2)
源代码
https://github.com/jiachenwei123/jiajia/blob/master/%E6%8A%95%E8%B5%84%E9%97%AE%E9%A2%98