已知资金总数为a万元,工程数n以及.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与理论 大 作 业 班级: 三班 学号: 104972071127 姓名: 闫春香 第一题: 令则,则 代入g(n)=O(1)和f(n)=O(n): 代入g(n)=O(1)和f(n)=O(1): 第二题: (1)该题的算法用的是多段图的向后处理算法,存储方式是用二维数组,a个资源投资n个项目,动态规划方程描绘如下: 在时:; 当时 ,其中; 当时 为j个资源分配i-1个项目时所产生的最大效益,它表示的是一种状态;为项目i投资资源j时所产生的效益。 (2)算法设计思想如下: 首先画出多段图,用n+1段图来表示,每一段有a+1个节点,表示把j个资源分配1,2,…i-1个项目,边具有的形式,。 算法详细描述: Procedure BGraph( int resource, int projectNum, int *g[]) //以下数组可以动态申请;projectNum+1 ×resource+1 int v[i][j];//v存放前 i-1个项目投资了j个资源时所产生的效益; int p[i][j];//p存放结果,初始为0,如果g[i][j]选定则p[i][j]为1;同时表示第i个项目//应投资j个资源; int d[i][j];//是存放路径;i表示第i+1段,j是第i+1段的某个节点,s=d[i][j]是i段的某个节点,该节点能使(i+1,j)产生最大值; for i=2 to projectNum do for j=0 to resource do if i=2 do //要为第二段单独赋值 v[i][j]=g[i-1][j]; if(resource == 1)//资源共一个时单独处理 cost=max{v[i][j]}//cost 保存最大值; p[1][j]=1;//此时的投资决策也确定 endif endif else for k=0 to j do//这步确定到达(i,j)使v[i][j]产生最大值的节点 cost=max{v[i-1][k] + g[i-1][j-k]} t=k;//t 用来记录前一个节点 repeat//for k d[i-1][j] = t;//记录节点,到第i,j节点的最大值是i-1,t; v[i][j] = cost;//保存了当前状态的最大值 repeat//for j repeat//for i //下面单独处理最后一段 for i=0 to projectNum do for j=0 to resource-i do sum=max{v[projectNum][u] + g[projectNum][w] } p[i][j]=1//在最后一段可以确定 repeat//for j repeat// for i //回溯寻找路径! for i=projectNum-1 to i=2 by -1 do s = d[i][a];//a是第n段所选的节点,据此能找到前面的; p[i][a-s] = 1;//确定结果 a = s; repeat// //打印输出 end BGRAPH (3)在c语言下实现,代码如下: // ResourcePlanning.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h #include stdio.h void BGraph(int resource, int projectNum, int *g[]) { int **v, **p, **d; int s = 0,t = 0;//保存记录 int cost = 0; // 记录节点状态效益值 ///////////////////////////////////////////////////////////////////// v = new int *[projectNum+1];//保存每段的状态 p = new int *[projectNum+1];//记录gnet效益值分配 d = new int *[projectNum+1];//记录路径; for(int i = 0; i = projectNum; i++)//动态申请! { v[i] = new int[resource + 1]; //资

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档