资源分配问题

1、问题描述

设有资源a,分配给n个项目,gi(x)为第i个项目分得资源x所得到的利润。求总利润最大的资源分配方案,也就是解下列问题:

max z=g1(x1)+ g2(x2)+……gn(xn)

x1+xx2+x3+……xn=a,  xi≥0,i=1,2,3,……,n

函数gi(x)以数据表的形式给出.例如:现有7万元投资到A,B,C 三个项目,利润见表,求问题总利润最大的资源分配方案。

                          

2、问题分析

1)阶段划分及决策

比较直观的阶段划分就是逐步考虑每一个项目在不同投资额下的利润情况。

2)数据结构设计:

           (1) 开辟一维数组q来存储原始数据。

           (2) 另开辟一维数组f存储当前最大收益情况。

           (3) 开辟记录中间结果的一维数组数组temp,记录正在计算的最大收益。

(4) 开辟二维数组a。

           (5) 数组gain存储第i个工程投资数的最后结果。

3、java实现

package 动态规划;

import java.util.Scanner;

public class 资源分配 {

	public static void main(String[] args) {
		int array[][] = new int[100][100];
		float item[] = new float[100];
		float get[] = new float[100];
		float temp[] = new float[100];
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		int n = sc.nextInt();
		for (int i = 0; i <= n; i++) {
			item[i] = sc.nextFloat();
			get[i] = item[i];
			array[1][i] = i;
		}
		for (int i = 2; i <= m; i++) {
			for (int j = 0; j <= n; j++) {
				item[j] = sc.nextFloat();
				temp[j] = item[j];
			}
			for (int k = 0; k <= n; k++) {
				for (int l = 0; l <= k; l++) {
					if(get[k-l] + item[l] > temp[k]) {
						temp[k] = get[k-l] + item[l];
						array[i][k] = l;
					}
				}
			}
			for (int p = 0; p <= n; p++) {
				get[p] = temp[p];
			}
		}
		int rest = n;
		int gain[] = new int[100];
		for (int i = m; i <= 1; i--) {
			gain[i] = array[i][rest];
			rest = rest - gain[i];
		}
		for (int j =1; j <= m; j++) {
			System.out.print(gain[j]+"  ");
		}
		System.out.println(get[n]);
		sc.close();
	}
	
}

 

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值