Задача такая:
Дано положительное число n, целые числа в порядке возрастания
p1 < p2 < ... < pk, и c1,
c2, ..., ck (0 < k < 10^5; 0 <= n, pi
< 10^9, 0 < ci < 10^9). pi - координаты точек
на оси, ci - их веса. Нужно выбрать точки так, чтобы сумма
их весов была максимальной, но расстояние между любой парой точек было
не меньше n (n - расстояние на оси).
Я делал так - на i-м шаге для каждой точки запоминал число, равное максимальной допустимой сумме совокупности i точек с учётом их весов, расположенных по возрастанию, и оканчивающейся данной точкой.
В общем случае не работает (неверный ответ), но я не смог найти примеров с ошибкой. Помогите, пожалуйста, разобраться.
Тестовый пример (на обоих программа работает верно):
Ввод
4 10
5 10 15 20
100 50 100 300
Вывод
400
Ввод
5 15
2 14 25 31 37
8 19 20 11 25
Вывод
44
#include
std::vector
int main() {
int n1, n2;
std::cin >> n1 >> n2;
std::vector
Ответ
Учитывая, что все веса положительные, все точки удовлетворяющие вашему условию |P[i] - P[j]| < n, i # j и будут решением. Это очевидно.
Комментариев нет:
Отправить комментарий