ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态规划-1-钢条切割

2021-10-26 15:05:55  阅读:195  来源: 互联网

标签:cut 钢条 int max price rod LEN 动态 切割


 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 }

 

标签:cut,钢条,int,max,price,rod,LEN,动态,切割
来源: https://www.cnblogs.com/cui-geng/p/15465819.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有