当前位置: 首页 > wzjs >正文

成都市 网站建设手机版网站如何制作软件

成都市 网站建设,手机版网站如何制作软件,互联网 社区教育网站建设论文,图片制作表情包递归求解 钢条切割问题是《算法导论》上动态规划部分的第一个例题。这里就以算法导论上的例子来讨论这个问题。 例如当我们切割n4的钢条时,切割情况如下: 用递归方法解决这个问题时,代码如下(以n4为例): …

递归求解

钢条切割问题是《算法导论》上动态规划部分的第一个例题。这里就以算法导论上的例子来讨论这个问题。

 例如当我们切割n=4的钢条时,切割情况如下:

 用递归方法解决这个问题时,代码如下(以n=4为例):

#include <bits/stdc++.h>
using namespace std;// 价格数组
int val[11] = {0,1,5,8,9,10,17,17,20,24,30};int cut_rod(int p[],int n)
{if(n == 0) return 0; // 边界条件int q = -1;for(int i = 1;i <= n;i++)q = max(q,p[i]+cut_rod(p,n-i));return q;
}int main()
{cout << cut_rod(val,4) << endl;return 0;
}

其中 for(int i = 1;i <= n;i++) q = max(q,p[i]+cut_rod(p,n-i)) :

p[i]+cut_rod(p,n-i)为前 i 个长度不切割,后面 n-i 个长度切割所能取得的最大值。

动态规划求解

实际运行的时候我们会发现当n的规模偏大的时候,再使用递归的话,程序很有可能超过一个小时的运行时长。所以我们展示如何将这个钢条切割问题转换为一个更高效的动态规划算法。

朴素递归算法之所以效率很低,是因为它反复求解相同的子问题。因此动态规划方法仔细安排求解顺序,对每个子问题只求解一次,并将结果保存下来。所以我们看出:动态规划是付出额外的空间来节省计算时间。

这一题可以用一个数组 f[] ,其中 f[i] 表示长度为 i 的钢条能得到的最大的价值。因此状态转移方程就能写为:

 其中,val(j) 表示前 j 个长度不切割的钢条的价值。

代码实现:

#include <bits/stdc++.h>
using namespace std;const int N = 11;int n;
int val[11] = {0,1,5,8,9,10,17,17,20,24,30}; // 价格数组
int f[N];int main()
{n = 10;for(int i = 1;i <= n;i++){for(int j = 1;j <= i;j++){f[i] = max(f[i],val[j]+f[i-j]);}}cout << "最大价值:" << f[n] << endl;return 0;
}

运行结果:

构造最优解

我们还可以拓展动态规划算法,使之对每个子问题不仅保存最大价值,而且给出切割方案。

对于长度为j的钢条,我们保存最优解对应的第一段钢条的切割长度x[j]。接着就可以循环求出长度为j-x[j]的切割方案。

代码实现:

#include <bits/stdc++.h>
using namespace std;const int N = 11;int n;
int val[11] = {0,1,5,8,9,10,17,17,20,24,30}; // 价格数组
int f[N];
int x[N];int main()
{n = 10;for(int i = 1;i <= n;i++){for(int j = 1;j <= i;j++){if(f[i] < val[j]+f[i-j]) x[i] = j; // 记录第一次切割的长度f[i] = max(f[i],val[j]+f[i-j]);}}cout << "最大价值:" << f[n] << endl;// 构造最优解cout << "切割方案:";int ll = n;while(ll > 0){cout << x[ll] << " ";ll -= x[ll];}cout << endl;return 0;
}

运行结果:

http://www.dtcms.com/wzjs/782718.html

相关文章:

  • 想要注册一个公司网站怎么做哪个网站使用vue 做的
  • 想给公司做个网站怎么做wordpress 加密
  • 合肥网站建设公司芜湖酒店网站建设
  • 南京个人网站建设页面设计标准规范
  • 哈尔滨网站建设服务网络股权设计培训课程
  • 温州网站 公司不适合学编程的人
  • 网站开发vs设计报告企业邮箱查询网站
  • 知名网站网页设计特色学历网站怎么做
  • 响应式品牌网站设计中国建设企业银行登录网站
  • 生活中的科技产品有哪些网站元素优化 移动站
  • 在电脑上怎么建设网站wordpress ghostjs
  • 西安百度推广服务公司如何做好搜索引擎优化工作
  • 建设好网站为什么读取不到文件计算机软件开发需要学什么
  • win10怎么做网站网站打开慢 可以只换空间不换域名吗
  • 南京网络建站模板文献综述 php网站开发
  • 智能建站平台z网站都要备案吗
  • wordpress后台无法打开郑州东区网站优化公司推荐
  • aspcms手机网站常州网站支付通道建设
  • 网站开发如何找甲方成都医疗网站建设
  • 如何登录中国建设银行网站山东官方网站栖霞市观里镇少城镇建设规划
  • 泸州做网站公司万网网站建设的子分类能显示多少个
  • 可以做头像的网站大学生网页设计个人主页
  • 简述网站开发主要步骤wordpress趣味插件
  • 泰安祥奕网络公司seo基础
  • 做网站只有搜网址吗公司名称变更网上核名怎么弄
  • 专做美食的网站永久免费空间
  • 秦皇岛网站关键词成都做公司网站推广
  • 深圳个人网站制作注册外贸公司需要多少钱
  • 成都企业建设网站电话网站模板怎么改
  • 推广策略英文上海网站建设seo推广