- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 动态规划;8.1 动态规划概述;8.1.1 从一个简单示例入门;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8.4.2* 双机调度问题;解;;int n=6; //作业数
int a[]={2,5,7,10,5,2};
int b[]={3,8,4,11,3,4};
bool dp[MAXN][MAXA][MAXB]; //三维动态规划数组
int schedule() //求解算法
{ int maxA=0,maxB=0;
for (int i=0;in;i++) //求maxA和maxB
{ maxA+=a[i];
maxB+=b[i];
}
memset(dp,0,sizeof(dp)); //初始化为false
for (int A=0;A=maxA;A++)
{ for (int B=0;B=maxB;B++)
dp[0][A][B]=true; //k=0时一定有解
}; for(int k=1;k=n;k++)
{ for(int A=0;A=maxA;A++)
{ for(int B=0;B=maxB;B++)
{ if (A-a[k-1]=0) //在MA上加工
dp[k][A][B]=dp[k-1][A-a[k-1]][B];
if (B-b[k-1]=0) //在MB上加工
dp[k][A][B]=(dp[k][A][B] || dp[k-1][A][B-b[k-1]]);
}
}
}; int ans=INF; //存放最少时间
for(int A=0;A=maxA;A++) //求ans
for(int B=0;B=maxB;B++)
if (dp[n][A][B])
ans=min(ans,max(A,B));
return ans;
};int n=6; //作业数
int a[]={2,5,7,10,5,2};
int b[]={3,8,4,11,3,4};
bool dp[2][MAXA][MAXB]; //三维动态规划数组
int schedule() //求解算法
{ int maxA=0, maxB=0;
for (int i=0;in;i++) //求maxA和maxB
{ maxA+=a[i];
maxB+=b[i];
}
memset(dp,0,sizeof(dp)); //初始化为false
for (int A=0;A=maxA;A++)
{ for (int B=0;B=maxB;B++)
{ dp[1][A][B]=false; //k=1时初始化为false
dp[0][A][B]=true; //k=0时一定有解
}
}
int c=0;; for(int k=1;k=n;k++)
{ c=1-c;
memset(dp[c],false,sizeof(dp[c])); //初始化dp[c]为false
for(int A=0;A=maxA;A++)
{ for(int B=0;B=maxB;B++)
{ if (A-a[k-1]=0) //在MA上加工
dp[c][A][B]=dp[1-c][A-a[k-1]][B];
if (B-b[k-1]=0) //在MB上加工
dp[c][A][B]=(dp[c][A][B] || dp[1-c][A][B-b[k-1]]);
}
}
}
int ans=INF; //存放最少时间
for(int A=0;A=maxA;A++) //求ans
for(int B=0;B=maxB;B++)
if (dp[c][A][B])
ans=min(ans,max(A,B));
return ans;
};可以进一步优化空间,设置一维动态规划数组dp,dp[A]表示当MA加工时间为A(0≤A≤maxA)时MB的最少加工时间。
首先将dp的所有元素初始化为0。
阶段k:考虑加工作业k-1,分为两种情况:;int n=6; //作业数
int a[]={2,5,7,10,5,2};
int b[]={3,8,4,11,3,4};
您可能关注的文档
- 算法设计与分析 思政课件 第1、2章 绪论、常用的数据结构及其应用.pptx
- 算法设计与分析 思政课件 第3章 基本算法设计方法.pptx
- 算法设计与分析 思政课件 第4章 分治法 .pptx
- 算法设计与分析 思政课件 第5、6章 回溯法、分支限界法.pptx
- 算法设计与分析 思政课件 第7章 贪心法 .pptx
- 算法设计与分析 思政课件全套 清华 第1--9章 绪论、常用的数据结构及其应用---NP完全问题.pptx
- 算法设计与分析 教学大纲(含课程思政)、实验教学大纲.docx
- Python数据分析与数据挖掘 课件全套 清华 第1--13章 Python概述---钻石数据分析与预测.pptx
- Python数据分析与数据挖掘 课件 第12、13章 实战案例-乳腺癌数据分析与预测、 实战案例-钻石数据分析与预测.pptx
- Python数据分析与数据挖掘 课件 第6、7章 Pandas基础与应用、 Matplotlib.pptx
- Python数据分析与数据挖掘 课件 第4、5章 类与对象、 NumPy模块的基础与应用.pptx
- Python数据分析与数据挖掘 课件 第1--3章 Python概述、 Python基础语法、函数.pptx
文档评论(0)