Member 12378355we Ответов: 1

Реализация режущего стержня в C++?


#include <iostream>

using namespace std;

int main()
{
    int n;
    n=8;
    int dp[n+2][n+2];
    for(int i=0;i<=n+1;i++)
        for(int j=0;j<=n+1;j++) 
            dp[i][j]=0;
    int b[]={0,1, 5, 8, 9, 10, 17, 17, 20};
    for(int i=1;i<=n+1;i++ )
        for(int j=1;j<=n+1;j++)
        {
    
            if(j>=i)
                dp[i][j]=max(dp[i-1][j],b[i]+dp[i][j-i]);
            else
                dp[i][j]=dp[i-1][j];
        }
    cout<<dp[n+1][n+1];
    return 0;
}


Что я уже пробовал:

Я хотел реализовать задачу режущего стержня с помощью 2-D массива.Но результат, заданный фрагментом кода, отличается от реального результата.
Ребята пожалуйста помогите мне :)

Patrice T

"отличается от реального выхода" не информативно.
Покажите реальный выход и фактический выход, объясните проблему.

Richard MacCutchan

Ну, кто знает, что этот код должен делать или что происходит на самом деле.

[no name]

Используйте отладчик, чтобы выяснить, где ваш ожидаемый результат (что бы это ни было) отличается от реального результата (что бы это ни было).

KarstenK

Сначала этот код не будет компилироваться. Используйте лучшие имена переменных, фигурные скобки и константы для "чистого кода". Может быть, еще немного cout поможет...

1 Ответов

Рейтинг:
0

Jochen Arndt

У вас есть выход из связанного массива доступа по адресу b[i] Массив имеет размер 9 элементов (максимально допустимый индекс равен 8), но вы обращаетесь к индексу 9 в своем цикле (последний i является n+1 = 9).

Я не знаю алгоритма режущего стержня. Но вам, возможно, придется либо изменить b массив или использование b[i-1].