1 #include <stdio.h>
2 #define LEN 10
3 #define NEGINF -999999
4 struct r_d {
5 int r; //profit
6 int s; //distance
7 };
8
9 int price[LEN+1] = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
10
11 int cut_rod(int price[], int n)
12 {
13 /*
14 DP-1-cut-rod.c:9:8: error: variable-sized object may not be initialized
15 int r[n+1] = {0, price[1]};
16 ^~~
17 int r[n+1] = {0, price[1]};
18 */
19 int r[LEN+1] = {0, price[1]};
20 int i, j, max;
21
22 for (i = 2; i <= n; i++) {
23 max = NEGINF;
24 for (j = i; j >= 1; j--)
25 max = (max > r[i-j] + price[j]) ? max : (r[i-j]+price[j]);
26 r[i] = max;
27 }
28 return r[n];
29 }
30
31 int extend_cut_rod(int price[], int n)
32 {
33 int r[LEN+1], s[LEN+1];
34 int i, j, max;
35 struct r_d sol;
36
37 r[0] = 0, s[0] = 0;
38 for (i = 1; i <= n; i++) {
39 max = NEGINF;
40 for (j = i; j >= 1; j--) {
41 if (max < r[i-j] + price[j]) {
42 max = r[i-j] + price[j];
43 s[i] = j;
44 }
45 }
46 r[i] = max;
47 }
48 for (i = 0; i <= n ; i++)
49 printf("extend_cut_rod. s[%d] = %d\n", i, s[i]);
50 printf("===========================================\n");
51 for (i = 0; i <= n ; i++)
52 printf("extend_cut_rod. r[%d] = %d\n", i, r[i]);
53 return r[n];
54 }
55
56 int extend_cut_rod_2(int price[], int n)
57 {
58 int r[LEN+1], s[LEN+1];
59 int i, j, max;
60 struct r_d sol;
61
62 r[0] = 0, s[0] = 0;
63 for (i = 1; i <= n; i++) {
64 max = NEGINF;
65 for (j = 1; j <= i; j++) {
66 if (max < r[i-j] + price[j]) {
67 max = r[i-j] + price[j];
68 s[i] = j;
69 }
70 }
71 r[i] = max;
72 }
73 for (i = 0; i <= n ; i++)
74 printf("extend_cut_rod_2. s[%d] = %d\n", i, s[i]);
75 printf("===========================================\n");
76 for (i = 0; i <= n ; i++)
77 printf("extend_cut_rod_2. r[%d] = %d\n", i, r[i]);
78 return r[n];
79 }
80
81 int main(int argc, char *argv[])
82 {
83 int r, i;
84
85 for (i = 0; i <= LEN; i++) {
86 r = cut_rod(price, i);
87 printf("cut-rod r%d = %d\n", i, r);
88 }
89 printf("===========================================\n");
90 extend_cut_rod(price, 10);
91 printf("===========================================\n");
92 extend_cut_rod_2(price, 10);
93
94 return 0;
95 }

动态规划-1-钢条切割(Dynamic Programming-1-rod cutting)的更多相关文章

  1. 动态规划算法详解 Dynamic Programming

    博客出处: https://blog.csdn.net/u013309870/article/details/75193592 前言 最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic ...

  2. 最优化问题 Optimization Problems & 动态规划 Dynamic Programming

    2018-01-12 22:50:06 一.优化问题 优化问题用数学的角度来分析就是去求一个函数或者说方程的极大值或者极小值,通常这种优化问题是有约束条件的,所以也被称为约束优化问题. 约束优化问题( ...

  3. 动态规划(Dynamic Programming)算法与LC实例的理解

    动态规划(Dynamic Programming)算法与LC实例的理解 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Le ...

  4. 动态规划系列(零)—— 动态规划(Dynamic Programming)总结

    动态规划三要素:重叠⼦问题.最优⼦结构.状态转移⽅程. 动态规划的三个需要明确的点就是「状态」「选择」和「base case」,对应着回溯算法中走过的「路径」,当前的「选择列表」和「结束条件」. 某种 ...

  5. 动态规划法(五)钢条切割问题(rod cutting problem)

      继续讲故事~~   我们的主人公现在已经告别了生于斯,长于斯的故乡,来到了全国最大的城市S市.这座S市,位于国家的东南部,是全国的经济中心,工商业极为发达,是这个国家的人民所向往的城市.这个到处都 ...

  6. 6专题总结-动态规划dynamic programming

    专题6--动态规划 1.动态规划基础知识 什么情况下可能是动态规划?满足下面三个条件之一:1. Maximum/Minimum -- 最大最小,最长,最短:写程序一般有max/min.2. Yes/N ...

  7. Dynamic Programming 动态规划入门笔记

    算法导论笔记 programming 指的是一种表格法,并非编写计算机程序 动态规划与分治方法相似,都是通过组合子问题的解来求解原问题.但是分治法将问题划分为互不相交的子问题.而动态规划是应用与子问题 ...

  8. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  9. [算法]动态规划(Dynamic programming)

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4603173.html Dynamic Programming的Programming指的不是程序而是一种表格 ...

  10. 动态规划Dynamic Programming

    动态规划Dynamic Programming code教你做人:DP其实不算是一种算法,而是一种思想/思路,分阶段决策的思路 理解动态规划: 递归与动态规划的联系与区别 -> 记忆化搜索 -& ...

随机推荐

  1. No.3.1

    JavaScript是什么? JavaScript是一种运行在客户端(浏览器)的编程语言,实现人机交互效果. 作用:网页特效(监听用户的一些行为让网页作出对应的反馈)     表单验证(针对表单数据的 ...

  2. VMware-实用网站

    二进制包的获取方式 ftp://ftp.redhat.com推荐网站  www.rpmfind.net相应的官方网站http://www.mysql.com

  3. [Python灰帽子-黑客与逆向工程师的Python编程之道]书籍

    [Python灰帽子-黑客与逆向工程师的Python编程之道]PDF高清版免费下载地址 提取码:76aw 内容简介  · · · · · · <Python灰帽子>是由知名安全机构Immu ...

  4. 数据类型之字符串(string)(四)

    字符串本质是:字符序列不可变1.字符串编码,Unicode ord('A') ord('王') 2.创建字符串,引号 a = 'Hello python!' b = "I'm a teach ...

  5. Java面向对象之static关键字详解

    static关键字详解 package OOP.Demo10; public class Person { //2:赋初值 { System.out.println("匿名代码块" ...

  6. Mac OS X 下安装Tableau Desktop Pro for Mac 10.2.0

    ​ 安装步骤 1.断网安装tableau 2.双击Tableau Desktop.pkg ​编辑 3.安装后到应用程序里把tableau这个单独文件从tableau文件夹里直接放到应用程序根目录 4. ...

  7. java poi技术基础案例

    基础 HSSF - 提供读写Microsoft Excel格式档案的功能.(03版本,处理xls) XSSF - 提供读写Microsoft Excel OOXML格式档案的功能.(07版本,处理xl ...

  8. 一条sql同时返回多个count结果

    select * from (select alarm_content name, count(id) `count` from ai_alarm WHERE alarm_content IS NOT ...

  9. vim 小记录

    将str1批量替换成str2 , 特殊符号前用转译符 \ :%s/str1/str2/g

  10. JAVA流程控制(查漏补缺)

    JAVA流程控制(查漏补缺) 目录 JAVA流程控制(查漏补缺) if 判断 switch多重选择 编译检查 for循环 for each break和continue if 判断 要判断引用类型的变 ...