算法设计与分析 思政课件 第8、9章 动态规划、NP完全问题.pptx

算法设计与分析 思政课件 第8、9章 动态规划、NP完全问题.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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};

文档评论(0)

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

精品资料

版权声明书
用户编号:7040145050000060

1亿VIP精品文档

相关文档