实验名称:用动态规划法求解资源分配问题     (验证型实验)

实验目标:

(1)掌握用动态规划方法求解实际问题的基本思路。

(2)进一步理解动态规划方法的实质,巩固设计动态规划算法的基本步骤。

实验任务:

(1)设计动态规划算法求解资源分配问题,给出算法的非形式描述。

(2) 实现该算法,计算10个实例,每个实例中n=30, m=10, Ci j为随机产生于范围(0,103)内的整数。记录各实例的数据及执行结果(即最优分配方案、最优分配方案的值)、运行时间。

(3)从理论上分析算法的时间和空间复杂度,并由此解释相应的实验结果。

实验设备及环境:

PC;C/C++等编程语言。

实验主要步骤:

(1)根据实验目标,明确实验的具体任务;

(2)分析资源分配问题,获得计算其最优值的递推计算公式;

(3)设计求解问题的动态规划算法,并编写程序实现算法;

(4)设计实验数据并运行程序、记录运行的结果;

(5)分析算法的时间和空间复杂度,并由此解释释相应的实验结果;

问题分析(包括问题描述、建模、算法基本思想及程序实现技巧等):

1.求最大利润

输入:c[i][j] = 将j+1 台设备分配给i+1 号车间得到的利润。

定义:将j 台设备分配给前i 个车间的最大利润p[i][j](即题目所求的是p[m][n]),因此p[i][j]是以下两种情况的较大值:

(1)不分配给i 号车间,此时的最大值为将j 台设备分配给前i-1 个车间的最大值,p[i][j] = p[i-1][j];

(2)分配k 台设备给i 号车间,剩下的j-k 台设备分配给前i-1 个车间,此时p[i][j] = c[i-1][k-1] + p[i-1][j-k],其中 1≤ k ≤j。

即p[i][j] = max{p[i-1][j], c[i-1][k-1] + p[i-1][j-k]},其中1≤ k ≤j.

初始化p[0][j] = 0(将j 台设备分配给前0 个车间),p[i][0] = 0(将0 台设备分配给前i 个车间)。

从i = 0 开始自底向上构造表即可计算出p[m][n].

2.求设备分配给哪些车间以及其分配数量。

在1.的基础上,在求p[i][j]的过程中,以表l[i][j] 表示分配给i 号车间的设备数。

从i = m, j = n 开始逆推,

若l[i][j] = 0,则表示这个车间没有分配到设备,此时i --;

若l[i][j] = 某个数k, 则表示这个车间分配到k 台设备,此时i --, j -= k。

实验数据及其结果(可用图表形式给出):

import java.util.Arrays;
public class Main{public static String maxProfit(int[][] c){int m = c.length+1, n = c[0].length+1;int[][] p = new int[m][n];int[][] l = new int[m][n];for(int i = 0; i < m; i ++)p[i][0] = 0;for(int j = 0; j < n; j ++)p[0][j] = 0;for(int i = 1; i < m; i ++){for(int j = 1; j < n; j ++){int max = p[i-1][j];l[i][j] = 0;for(int k = 1; k <= j; k ++){if(max < c[i-1][k-1] + p[i-1][j-k]){max = c[i-1][k-1] + p[i-1][j-k];l[i][j] = k;}}p[i][j] = max;}}String result = "";for(int i = m-1, j = n-1; i > 0 && j > 0;){if(l[i][j] == 0)i --;else{result = "\n" + "车间" + i + " 分配: " + l[i][j] + result;j -= l[i][j];i --;}}result = "最大利润: " + p[m-1][n-1] + result;return result;}public static void main(String[] args) {int[][] c = new int[3][10];for(int i = 0; i < 3; i ++){c[i][0] = (int)(Math.random()*10);for(int j = 1; j < 10; j ++){c[i][j] = c[i][j-1] + (int)(Math.random()*5);}}for(int i = 0; i < 3; i ++)System.out.println(Arrays.toString(c[i]));System.out.println(maxProfit(c));}
}

实验结果分析及结论:

附:[资源分配问题]

某厂根据计划安排,拟将n台相同的设备分配给m个车间,各车间获得这种设备后,可以为国家提供盈利Ci j(i台设备提供给j号车间将得到的利润,1≤in,1≤jm) 。问如何分配,才使国家得到最大的盈利?

[算法设计与分析] 用动态规划法求解资源分配问题 (Java)相关推荐

  1. 算法设计与分析之动态规划法

    文章目录 前言 一.动态规划法概述 二.动态规划法设计思想 三.动态规划法的基本要素 四.动态规划算法的设计步骤 五.动态规划法与分治法 六.动态规划法与贪心法 七.动态规划法示例 总结 前言 大家好 ...

  2. 动态规划法求解资源分配问题

    问题描述 资源分配问题是将数量一定的一种或若干种资源(原材料.资金.设备或劳动力等),合理地分配给若干使用者,使总收益最大. 例如,某公司有3个商店A.B.C,拟将新招聘的5名员工分配给这3个商店,各 ...

  3. 算法设计与分析5.11求解满足方程解问题

    编写一个实验程序,求出a.b.c.d.e,满足ab-cd-e=1方程,其中所有变量的取值为1~5并且均不相同. 注:原书上的方程为ab-cd+e=1,该方程无解. 分析:采用回溯法,以找到变量的个数为 ...

  4. java实现 库鲁斯卡尔算法 kruskal(算法设计与分析作业)

    java实现 库鲁斯卡尔算法kruskal(算法设计与分析作业) package package1;import java.util.Arrays;public class alg {//判断tar是 ...

  5. 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

    动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...

  6. 算法设计与分析--01背包问题(动态规划法解决)

    算法设计与分析--01背包问题(动态规划法解决) 参考文章: (1)算法设计与分析--01背包问题(动态规划法解决) (2)https://www.cnblogs.com/2228212230qq/p ...

  7. 【算法设计与分析】求解查找假币问题

    文章目录 前言 题目描述 解题思路 参考代码 总结 前言 <算法设计与分析>的实验,稍微记录一下,欢迎讨论. 题目描述 编写一个实验程序查找假币问题.有n(n>3)个硬币,其中有一个 ...

  8. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt

    <王晓东<算法设计与分析>课件.ppt>由会员分享,可在线阅读,更多相关<王晓东<算法设计与分析>课件.ppt(356页珍藏版)>请在人人文库网上搜索. ...

  9. 程振波 算法设计与分析_算法设计与分析

    本书按照教育部*制定的计算机科学与技术专业规范的教学大纲编写,努力与国际计算机学科的教学要求接轨.强调 算法 与 数据结构 之间密不可分的联系,因而强调融数据类型与定义在该类型上的运算于一体的抽象数据 ...

  10. 计算机算法设计与分析教学大纲,算法设计与分析的教与学(教学大纲)

    原标题:算法设计与分析的教与学(教学大纲) 课程代码:**** 课程负责人: **** 课程中文名称:算法设计与分析 课程英文名称:Designand Analysis of Algorithms 课 ...

最新文章

  1. [特征工程系列五]基于蒙特卡洛搜索树的半自动特征工程方案
  2. 经典实用SQL语句大全汇总
  3. 存储过程——介绍(一)
  4. python qt开发_Python 使用Qt进行开发(三)
  5. 释放虚拟GPU力量 NVIDIA 加速企业远程办公生产力变革
  6. Multi GET API介绍
  7. ThinkPHP6项目基操(17.实战部分 Filesystem文件上传)
  8. ExtJs2.0学习系列(7)--Ext.FormPanel之第四式(其他组件示例篇)
  9. chmod命令(chmod函数)自动清除设置用户ID位和设置组ID位
  10. 联想17TV语音遥控教程 语音点播更方便
  11. RAID10磁盘阵列损坏修复操作
  12. 重磅直播 | 透彻剖析室内室外激光SLAM关键算法
  13. chrome上字体模糊问题处理
  14. 21考研上岸吉大人工智能学院考研复习策略
  15. 【已解决】体视显微镜左右成像大小不一致
  16. Vue element 日期获取展示今天日期
  17. mysql中事务id,有啥用?
  18. 编写测试用例的基本方法之边界值
  19. 【吉大刘大有数据结构绿皮书】向LinkedList类中增加一个函数Contrary,功能为将其所有结点按相反次序链接。
  20. linux中构建支持lighttpd + cgi的环境

热门文章

  1. 天玑9200领跑背后,高端芯片掀起蝴蝶效应
  2. win的反义词_趣味记忆—小学英语必须掌握的120组反义词
  3. horizon2206+A6000显卡 vGPU桌面经验分享
  4. java 地铁线路_个人项目-地铁出行路线规划(Java代码实现)
  5. 微信公众号管理欧宁泰php,米拓微信公众号管理应用-MetInfo帮助中心
  6. 【5G NR】手机身份证号IMEI与IMEISV
  7. 量化交易让股市成为你的印钞机
  8. QT 自定义圆形QLabel 加载圆形图片
  9. 游戏美术资源网站推荐
  10. 怎样在Git码云上上传项目