首页 > 编程语言 > 详细

算法分析与设计(work7)

时间:2021-04-26 15:57:34      阅读:16      评论:0      收藏:0      [点我收藏+]

1、问题

设m万元钱,n项投资,函数 fi (x)表示将x万元投入第i项项目所产生的效益,i=1,2,...,n.问:如何分配这 m 元钱,使得投资的总效益最高?

2、解析

\(dp[i][j]\) 表示用\(j\)万元投入到前\(i\)个项目中可以获取的最大收益。

很显然,首先考虑转移方程,对于前\(i\)个项目的最大收益一定是从前\(i-1\)个项目的最大收益转化而来。那么可以枚举第\(i\)个项目所投资金额,设其为\(x\),那么其收益就是\(f_{i}(x)\),那么我们就可以推出转移方程 \(dp[i][j]=dp[i-1][j-x]+f_{i}(x)(x<=j)\)

方程不断转移最后 \(dp[n][m]\) 即是最大收益。

3、设计

for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
        for(int k=j;k>=1;k--){
            dp[i][j]=max(dp[i][j],dp[i-1][j-k]+f[i][k]);
        }
    }
}

4、分析

需要枚举所有用\(j\)万元投入到前\(i\)个项目中的状态,时间复杂度\(O(nm)\),对于每个状态下,我们需要枚举第\(i\)个项目的投资数量进行转移,时间复杂度\(O(m)\),因此,总时间复杂度\(O(nm^2)\)

5、源码

github源码地址:
https://github.com/HaHe-a/Algorithm-analysis-and-design-code/blob/master/Investment issues.cpp

算法分析与设计(work7)

原文:https://www.cnblogs.com/ha-chuochuo/p/14704259.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!