实验报告
课程名称 《算法分析与设计》
实验日期 2021年 4 月 25 日 至 2021年 5 月 1日
实验名称 实验七:7.3投资问题
实验地点 同组人员 无
- 问题
假设分配给第i个项目xi元钱,即求MAX(Σ1->i fi(xi));
-
解析
主要使用动态规划的方法来对问题进行解决。
Fk(x)表示x万元投给前k个项目的最大收益;
Fk(x) = MAX{(fk(xk) + Fk-1(x - xk)},k=2,3,…,n.
F1(x)=f1(x)
即求MAX(Fk(x)) k<=n -
设计
[核心伪代码]
Int invest[10][10]; //用来存储单个投资的效益f的映射关系。其中每行代表了一个投资的效益f的映射关系
Point F[10][10];//用来保存引入的新的映射,[m][n]上的point结构体数据中,使用F来表示,给定m单位的钱,使用前n项投资所获得的最大效益,使用x表示,在达成上述的最大效益时,第n项投资所投入的钱。
int main()
{
获取m和n,并得到投资的映射invest
for(int k = 0;k < n;k++)
for(int x = 1;x <= m;x++)
int maxi = 0;
int tmp = 0;for(int xi = 0;xi <= x;xi++) if(invest[k][xi] + F[k-1][x-xi].F > maxi) maxi = invest[k][xi] + F[k-1][x-xi] tmp = xi; F[k][x].F = maxi;
}
4. 分析
[算法复杂度推导]
- [github源码地址]
https://github.com/zjk715/–homework