#include <stdio.h>
/*
*钢条切割问题:
*问题描述
假设公司出售一段长度为i英寸的钢条的价格为Pi(i = 1, 2, ...单位:美元),下面给出了价格表样例:
长度i     1     2     3     4     5      6     7     8     9     10
价格Pi    1     5     8     9     10     17    17    20    24    30
切割钢条的问题是这样的:给定一段长度为n英寸的钢条和一个价格表Pi,求切割方案,使得销售收益Rn最大。
*/
//假定价格一开始已经给出了,用全局的写死#define max(x,y) (x)>(y)?(x):(y)int price[10] = {1,5,8,9,10,17,17,20,24,30};//参数n为长度
/*
**一般的递归问题
*/
int
getMaxGain(int n)//自顶向下
{if (0 == n){return 0;}//最小的标量int _max = 0;for (int i = 1; i <= n; ++i){// printf("i ==== %d\n", price[i-1]);_max = max(_max,price[i-1] + getMaxGain(n-i));}return _max;
}//动态规划版本
/*
**保留每一次计算出来的结果,需要的时候从保留的结果里面查
*/
int
dy_getMaxGain(int n)//自顶向下求解
{//假设我们求的长度总是小于10,方便用数组,否则动态开辟数组static int cache[10] = {0};if (cache[n] > 0){return cache[n];}if (0 == n){return 0;}printf("%d\n", n);//最小的标量int _max = 0;for (int i = 1; i <= n; ++i){_max = max(_max,price[i-1] + getMaxGain(n-i));cache[i] = _max;}return _max;
}int
dy_buttomToUp(int n)
{static int cc[11] = {0};if (n == 0){return 0;}int _max = 0;for (int i = 1; i <= n; ++i){_max = 0;for (int j = 1; j <= i; ++j){_max = max(_max,price[j-1]+cc[i-j]);}cc[i] = _max;}for (int i = 0; i < 10; ++i){printf("%d ",cc[i]);}printf("\n");return cc[n];
}int main(int argc, char const *argv[])
{//testprintf("noDY=%d\n",getMaxGain(7));printf("_dy=%d\n", dy_getMaxGain(6));printf("^^^^^^^^%d\n",dy_buttomToUp(7));return 0;
}

  

反思,由于是看完了算法导论这一节,开始写的代码,唉,写代码的时候满脑子算法导论上得伪代码思路,

以后要尽量自己先写,先思考,然后再参照算法导论的伪代码。。。。。。谨记

转载于:https://www.cnblogs.com/yangyu001/p/4084290.html

动态规划 钢条切割问题相关推荐

  1. 动态规划 — 钢条切割问题

    动态规划: 什么是动态规划? 动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息.在求解任一子问题时 ...

  2. 算法导论 动态规划钢条切割问题 C语言

    动态规划钢条切割问题 动态规划(dynamic programming)与分治法类似.分治策略将问题划分为互不相交的子问题,递归求解子问题,再将子问题进行组合,求解原问题.动态规划应用于子问题重叠的情 ...

  3. 动态规划—钢条切割问题与01背包问题

    目录 1.钢条切割问题 第一种求最优解方案: 第二种求最优解方案: 第一种方法是 带备忘的自顶向下法 第二种方法是 自底向上法 2.01背包问题 1,穷举法(把所有情况列出来,比较得到 总价值最大的情 ...

  4. 算法导论-动态规划-钢条切割问题

    文章目录 一.钢条切割定义 二.具体步骤 1.思考 2.代码思考 3.动态规划求解 4.伪代码 三:总结: 一.钢条切割定义 图为价格表 给定一段长度是n的钢条和一个价格表,求切割方案使得收益达到最大 ...

  5. 动态规划-钢条切割(java)

    数据结构与算法系列源代码:https://github.com/ThinerZQ/AllAlgorithmInJava 本文源代码:https://github.com/ThinerZQ/AllAlg ...

  6. 动态规划 -- 钢条切割问题

    给定一段长度为n英寸的钢条和一个价格表p,求切割钢条方案(钢条的长度均为整英寸),使得销售收益最大. 我们可以计算出长度为n英寸的钢条共有2的(n-1)次方种不同的切割方案. 为解决规模为n的原问题, ...

  7. 动态规划——钢条切割

    有一根钢条,和他的长度价格表,真么样切割才能使得售出的钢条收益最大. 不考虑钢条的切割损耗. 输入n 表示钢条的长度 价格表p[i] 表示长度为i的钢条出售的价格 ------------------ ...

  8. 动态规划-钢条切割问题

    int BottomUpCutRod(int p[],int n) { int *r=new int[n+1]; r[0]=0; for (int j=1;j<=n;j++) { int q=- ...

  9. 《算法导论》中动态规划求解钢条切割问题

    动态规划算法概述 动态规划(dynamic programming)1是一种与分治方法很像的方法,都是通过组合子问题的解来求解原问题.不同之处在于,动态规划用于子问题重叠的情况,比如我们学过的斐波那契 ...

  10. 钢条分割 动态规划java_【动态规划】初识,钢条切割问题

    正文之前其实动态规划老早之前就看过, 但是可惜的是印象不深,到今天彻底忘得差不多了,这两天看<算法导论>终于让我啃下了二叉搜索树和红黑树两个家伙,虽然还未曾熟练于胸,但是基本能用了...现 ...

最新文章

  1. SAP QM 由于存在未清TO单导致QA11失败
  2. ehcache缓存原理_贼厉害,手撸的 SpringBoot缓存系统,性能杠杠的!
  3. PLSQLDeveloper SQL查询内容中文显示乱码
  4. jenkins配置python脚本参数_jenkins配置python脚本定时任务过程图解
  5. weex 富文本_Weex richtext 富文本某个字加重显示
  6. 服务器告警其一:硬盘raid问题
  7. 「最简单」的 Core Data 上手指南
  8. 有序数组中查找第一个比target大的数
  9. vue mint-ui 三级地址联动
  10. 一个神奇的数字货币,终结了南非小哥每天步行20公里的烦恼
  11. idea - Error during artifact deployment. See server log for details.
  12. SQL server 2005下载地址
  13. win10 修改git账号密码
  14. 【转载】DIY新浪微博Android手机客户端(一)(二)(三)完
  15. git出现 [rejected]master -> master (non-fast-forward)问题怎么解决
  16. 赫夫曼树、赫夫曼编码
  17. Oracle执行语句跟踪(1)——使用sql trace实现语句追踪
  18. 百度APP核心技术:Android多子view嵌套最佳通用解决方案
  19. redhat 新开启一个ssh端口
  20. linux 字符界面

热门文章

  1. 一.Nginx的特性和一些知识点
  2. 谈谈对一些软件架构设计箴言的理解 对软件的过早地优化是万恶的根源 反设计模式案例简介...
  3. Android开发16——获取网络资源之基础应用
  4. iPhone/iPad/iPod touch编程时版本区分
  5. 【译】三层架构代码生成器(NetTierGenerator)
  6. Lucene全文检索(一)
  7. Django框架(三)-- orm增删改查、Django生命周期
  8. 【React Native开发】React Native控件之RefreshControl组件具体解释(21)
  9. python基础(set)补充
  10. 关于javascript中apply()和call()方法的区别