Я изучаю динамическое программирование. Я застрял на этом вопросе Умножение цепочки матриц. Я понимаю необходимость трех петель. Но как придумать такие схемы, как j = i + L-1 и условие проверки для i. Есть еще несколько вопросов DP с аналогичными решениями, и я заметил, что эти циклы используются только для заполнения верхней треугольной матрицы. Я хочу знать, почему мы пишем такие циклы?

for (int L=2; L<n; L++){
    for (int i=1; i<n-L+1; i++)
    {
        int j = i+L-1; // Why ?
        m[i][j] = INT_MAX;
        for (int k=i; k<=j-1; k++)
        {
            int q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
            if (q < m[i][j])
            {
                m[i][j] = q;
            bracket[i][j] = k;
            }
        }
    }
}
1
user9818569 20 Май 2018 в 14:16

1 ответ

Лучший ответ

L - длина цепочки. i - номер строки. j - номер столбца. k - промежуточное умножение.

0
akisonlyforu 20 Май 2018 в 11:33