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. LeetCode-689 三个无重叠子数组的最大和

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-sum-of-3-non-overlapping-subarrays 题目描述 ...

  2. elasticsearch 索引数据手动复制注意事项

    一.背景 有一个已经在A机器建立的100+G的es索引数据文件,需要将这份数据文件直接复制到B机器的elasticsearch中 B机器的节点是在一个集群中,有多个数据节点. 没有原始数据,不重新构建 ...

  3. DRF全局总结

    基础部分 一.创建工程 1.创建虚拟环境 python -m venv 路径 2.安装Django 进入虚拟环境 pip install Django 3.创建项目 django-admin star ...

  4. 让CSS flex布局最后一行列表左对齐的N种方法

    原文链接https://mp.weixin.qq.com/s?__biz=MjM5MDA2MTI1MA==&mid=2649091838&idx=1&sn=fa4e1ed1e0 ...

  5. golang 中使用mysql报错:“ scannable dest type slice with >1 columns (4) in result”

    query := fmt.Sprintf("SELECT .... infos = make([]*struct, 0, 10) err = s.db.GetContext(ctx, &am ...

  6. sql server 最近执行语句统计查询分析

    查询语句: select * from ( SELECT [RowNumber],DATEDIFF(second, StartTime, isnull(EndTime ,StartTime)) 执行时 ...

  7. 钉钉获取群openConversationId方式以及企业内部机器人发送群消息

    https://open-dev.dingtalk.com/apiExplorer#/jsapi?api=biz.chat.chooseConversationByCorpId 通过上述URL进入钉钉 ...

  8. Kubernetes 安装网络插件(calico)

    简介 Calico是Kubernetes生态系统中另一种流行的网络选择.虽然Flannel被公认为是最简单的选择,但Calico以其性能.灵活性而闻名.Calico的功能更为全面,不仅提供主机和pod ...

  9. airtest截图后放在allure报告里面。

    #需要导入的包 from airtest.aircv import * from airtest.aircv.utils import cv2_2_pil screen1 = G.DEVICE.sna ...

  10. requests库获取指定关键词的图片,并保存到本地

    var code = "45f4267f-9476-44ca-ac68-6d32aad2d4e1" 源码地址:https://gitee.com/myrensheng/data_a ...