Найдите всю последовательную сумму подмножества в O (n ^ 2), используя dp

Вопрос :

Даны n чисел ??,??,…,??, рассмотрим задачу вычисления ?[?,?]=??+??+?⋯?? для всех ?<=?. Наивный алгоритм, вычисляющий каждое ?[?,?] независимо, займет ?(?^?) времени. Найдите эффективный способ решения этой задачи за ?(?^?) времени.

Я попытался нарисовать двухмерную таблицу, в которой строка и столбец равны 1 ~ n, и найти формулу для заполнения всей таблицы (верхний треугольник). Но я думаю, что каждый блок неправильный, может быть, это не очень хорошая идея. Есть идеи? Спасибо.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Однако нет необходимости в памяти O (n ^ 2). Вы можете использовать так называемые префиксные суммы. Создайте массив 'prefsum[n]', где для каждого i в (1 ... n) prefsum[i] = x1 + x2 + ... + xi. Если вы хотите получить сумму в диапазоне (l, r), просто возьмите prefsum[r] - prefsum[l - 1] (очевидно, если l-1 > 0, иначе ваш результат будет prefsum[r]). Таким образом, вы можете вычислить предварительную сумму за O (n) (простой цикл for) и получить результат для любого диапазона за O (1). Поскольку существует O (n ^ 2) разных диапазонов, ваша сложность равна O (n ^ 2).

Ответ принят как подходящий

Да, ваша идея использовать 2-мерную таблицу (только верхний треугольник) верна. Затем вам нужно только заметить, что:

enter image description here

и что

enter image description here

Таким образом, каждый вход вашей таблицы будет вычисляться за O (1), а весь верхний треугольник за O (n ^ 2)

Другие вопросы по теме