算法设计与分析 实验七 投资问题

问题

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

解析

1、问题分析
假设分配给第i个项目的钱数是xi,问题描述为:
目标函数:max{f1(x1)+ f2(x2)+…+ fn(xn)}
约束条件:x1 +x2 +…+xn=m,xi∈N
实例:
在这里插入图片描述
2、问题拆解
设Fk(x)表示x万元投给前k个项目的最大效益,k=1,2,…,n, x=1,2,…,m。
设给第k个项目投资xk万元,故投资给前k-1的项目资金为(x-xk)万元
递推方程:Fk(x)=max{ fk(xk)+ Fk-1(x-xk)},k=2,3,…,n
边界条件:F1=f1(x),Fk(0)=0,k=1,2,…,n

3、问题求解
设新加第i项时,总共分配x元时,第i项分配了k元xi=k, xi(x)=k。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

核心代码

for (int i = 0; i <=money; i++) {
			g[i]=arr[i][1];
			a[1][i]=i;
		}
		for (int k = 2; k <= n; k++) {
			for (int i = 0; i <=money; i++) {
				t[i]=arr[i][k];
				a[k][i]=0;
			}
			for (int i = 0; i <= money; i++) {
				for (int j = 0; j <=i; j++) {
					if(arr[j][k]+g[i-j]>t[i]) {
						t[i]=arr[j][k]+g[i-j];
						a[k][i]=j;
					}
				}
			}
			for (int i = 0; i <=money; i++) {
				g[i]=t[i];
			}
		}

时间复杂度

在这里插入图片描述

源码

github源码

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值