动态规划--投资问题

P40 投资问题

动态规划解决投资问题的例子。
由于公式输入比较麻烦,比较简单容易理解的直接采用老师的ppt或者采用手写方式。
投资问题描述:
在这里插入图片描述
一个问题实例
在这里插入图片描述
我的分析
在这里插入图片描述
在这里插入图片描述
java实现

//投资问题
	//问题描述:m万元钱,n项投资,fi(x):将x元投入第i个项目的效益。求使得总效益最大的投资方案
	//输入:m,和n,以及n个项目的投资收益表;f[n][m+1] 都从下标1开始,f[1][2]代表给第1个项目投资2万元
	public void investmentIssues(int[][] f, int m,int n) {
		int[][] r = new int[n+1][m+1];
		int[][] s = new int[n+1][m+1];
		//k代表投资前k个项目
		for (int k = 1; k <= n; k++) {
			//i代表投资前k个项目  不超过i万元钱
			for(int i = 1; i <= m; i++) {
				//j代表投资第k个项目j万元钱
				for(int j = 0; j <= i; j++) {
					//r[k-1][i-j]代表投资第k-1个项目i-j元钱所能收获的最大效益,f[k-1][j]代表投资第k个项目j元钱带来的效益
					//因为数组下标从0开始,所以k-1;
					int temp = r[k-1][i-j] + f[k-1][j];
					if(temp > r[k][i]) {
						r[k][i] = temp;
						s[k][i] = j;
					}
				}
			}
		}
		
		getInvestmentIssues(f, m, n, r, s);
	}

	private void getInvestmentIssues(int[][] f, int m, int n, int[][] r, int[][] s) {
		System.out.println("投资前" + n + "个项目" + m + "元钱的最大收益是" + r[n][m] + ",投资第" + n + "个项目的钱是:" + s[n][m]);
		if(n == 0 || m == 0) {
			return;
		}
		getInvestmentIssues(f, m - s[n][m], --n, r, s);
	}

老师的分析
略过了问题建模
第二步子问题界定和第四步计算顺序的确定
在这里插入图片描述
第三步优化函数的递推方程
在这里插入图片描述
实例计算F(1,x)的各个最优效益。指投资前1个项目,x元钱的最大效益。
在这里插入图片描述
k=2,时的最大效益
在这里插入图片描述
得出解的备忘录
在这里插入图片描述
时间复杂度的分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值