实验7-投资问题

实验报告

课程名称 《算法分析与设计》 实验日期 2021 年 4 月 25 日 至 2021 年 4 月 25日
学生姓名 石晨昊 所在班级 计算机194 学号 2019212212322
实验名称 投资问题
实验地点 同组人员

1.问题
一般性描述:设m元钱,n项投资项目,函数fi(x)表示将x元投入第i项项目所产生的效益,i=1,2,···,n;
问:如何分配这m元钱,使得投资总效益最高?
组合优化问题:假设分配给第i个项目的钱数是xi,
目标函数:max{f1(x1)+ f2(x2)+···+ fn(xn)};
约束条件:x1+x2+x3+···+xn=m,xi∈n;
2.解析
优化函数的递推方程: Fk(x)表示的意思是 把 x 元 投资给 前 k 个项目 获得的最大收益。

x的范围(投资的总的钱数) 是0 到 x

k 的范围是 1 到 n (总共有 n 个项目)

那么 Fk(x) 的值应该是 对 第k个项目投资 了 xk 元 后的收益 + 把剩下的钱(x-xk)投给 前 k-1个项目的总的收益 Fk-1(x-xk)

那么,这个 xk的值 可以从 0 到 x,就是说,可以一分钱也不投资给 第k个项目,也可以把所有钱都投资给 这个项目,所以,这里要遍历 x+1次 才可以获得收益的最大值。

3.设计

int maxprofit(int dp[M][N],int f[M][N],int money,int number)
{
	for (int i=1;i<=number;i++)
	{
		for (int j=0;j<=money;j++)
		{
			dp[i][j]=0;
			for (int k=0;k<=j;k++)
			{
				if (dp[i][j]<f[i][k]+dp[i-1][j-k])
					dp[i][j]=f[i][k]+dp[i-1][j-k];
			}
		}
	}
	return dp[number][money];
}

4.分析
时间复杂度: O(nm2)

5.源码
https://github.com/695950719/Algorithm-design/blob/main/lab7-%E6%8A%95%E8%B5%84%E9%97%AE%E9%A2%98.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值