Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 棒料切割问题递归自顶向下实现中的价格失配_C_Dynamic Programming - Fatal编程技术网

C 棒料切割问题递归自顶向下实现中的价格失配

C 棒料切割问题递归自顶向下实现中的价格失配,c,dynamic-programming,C,Dynamic Programming,我正在学习如何解决棒料切割利润最大化的问题。但是当我写这段代码时,它并没有产生一个激烈的结果。他给出的结果是20,但正确的结果是10 以下是代码: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int _max(int a, int b) { if (a > b) return a; else return b; } int cut_rod(int prices[],

我正在学习如何解决棒料切割利润最大化的问题。但是当我写这段代码时,它并没有产生一个激烈的结果。他给出的结果是20,但正确的结果是10

以下是代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int _max(int a, int b) { if (a > b) return a; else return b; }

int cut_rod(int prices[], int size)
{
    if (size == 0) return size;

    int max = 0;
    for (int i = 1; i <= size; i++)
    {
        max = _max(max, prices[i] + cut_rod(prices, size - i));
    }

    return max;
}

int main(int argc, char** argv)
{
    int arr[] = { 1,5,8,9};
    int size = sizeof(arr) / sizeof(arr[0]);

    int max = cut_rod(arr, size);
    printf("Maximum Obtainable Value is %d", max);
    getchar();
    return 0;
}
\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
int_max(inta,intb){if(a>b)返回a;else返回b;}
内部切割杆(内部价格[],内部尺寸)
{
如果(大小==0)返回大小;
int max=0;

对于(int i=1;i您可以访问

for (int i = 1; i <= size; i++)
{
    max = _max(max, prices[i] + cut_rod(prices, size - i));
}

for(int i=1;i我能用它做些什么?@maylor我还没有看算法,所以有一个大胆的猜测:让循环条件
i
而不是怎么可能?
for (int i = 0; i < size; i++)
{
    max = _max(max, prices[i] + cut_rod(prices, size - i - 1));
}
for (int i = 0; i < size; i++)
{
    max = _max(max, prices[i] + cut_rod(prices, size - i - 1));
}