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. PostgreSQL TOAST技术解析

    一.TOAST是什么? TOAST是"The Oversized-Attribute Storage Technique"(超尺寸字段存储技术)的缩写,主要用于存储一个大字段的值. ...

  2. 跟着廖雪峰学python 006

    ​ 递归函数 在函数内部调用自身本身 计算阶乘: def fact(n): if n == 1: return 1 return n * fact(n - 1) 注意:使用递归函数需要防止栈溢出. 在 ...

  3. ABAP 拼接PDF

    参考标准程序RSPO_TEST_MERGE_PDF_FILES*--合并PDF data: pdf_merger type ref to cl_rspo_pdf_merge. data: ex typ ...

  4. .NET6+WebApi+Vue 前后端分离后台管理系统(二)

    项目搭建: 这个项目使用的开发工具是:VSCode,工具的下载和安装这里就不赘述了,自行百度吧.使用的技术主要是: Vue3.Element Plus 等,Vue 项目的搭建这里也不赘述,如果不熟悉可 ...

  5. 并发JUC

    JUC初级 • 1.什么是 JUC • 2.Lock 接口 • 3.线程间通信 • 4.集合的线程安全 • 5.多线程锁 • 6.Callable 接口 • 7.JUC 三大辅助类: CountDow ...

  6. sql语句顺序/包含执行顺序和书写顺序

    分页查询 如果一页记录为10条,希望查看第3页记录应该怎么查呢?  第一页记录起始行为0,一共查询10行:  第二页记录起始行为10,一共查询10行:  第三页记录起始行为20,一共查询10行: ...

  7. 论文阅读: CCF A 2021 PROGRAML:用于数据流分析和编译器优化的基于图的程序表示 (PMLR)

    Motivation:   编译器实现是一项复杂而昂贵的活动.出于这个原因,人们对使用机器学习来自动化各种编译器任务产生了极大的兴趣,大多数工作都将注意力限制在选择编译器启发式或做出优化决策.现有的基 ...

  8. 10. watch的实现原理

    watch的实现原理 watch和computed一样, 也是基于 Watcher 的 组件内部使用的watch 和 外部使用的 vm.$watch()都是调用的Vue.prototype.$watc ...

  9. Java_类与对象

    类与对象 概念 类是抽象的,概念的,代表一类事物,比如人类.猫类--,即它是数据类型. 对象是具体的,实际的,代表一个具体事物,即使实例. 类是对象的模板,对象是类的一个个体,对应一个实例 对象在内存 ...

  10. 一个好的程序应该像AK47

    一个好的程序应该像AK47: 容易上手(配置.设置.功能描述清晰),结构简单(低耦合,模块化,单元化),拆装方便(安装部署.卸载.迁移很少有障碍),从不卡壳(已知业务冲突解决),故障率低(未知或可能出 ...