Планування багатопроцесорних систем#371

Планування багатопроцесорних систем

2 секунди
64 мегабайти
Дуже складна

На багатопроцесорній машині виконуються дві програми. Кожна програма (i = 1, 2) складається з процедур, які пронумеровані від до і повинні виконуватися послідовно (у порядку 1, \ldots, N). Процедуру ідентифікує пара , де i = 1, 2 — це номер програми, а 1 \leq j \leq N — номер процедури всередині програми . Процедуру можна виконати лише на процесорі P(i, j), і її виконання триває D(i, j) секунд. Потрібно розпланувати виконання процедур обох програм так, щоб момент закінчення останньої процедури (у будь-якій програмі) був мінімальним; цей момент називається makespan (тривалість виконання). Обидві програми доступні для планування з часу .

Планування повинно дотримуватися наступних правил:

Напишіть програму, яка для заданих процедур обох програм знаходить мінімальний makespan.

Вхідні дані

Перший рядок містить — кількість тестів.

Перший рядок кожного тесту містить число (1 \leq N \leq 300) — кількість процедур у кожній програмі. Далі йдуть рядків для першої програми; -й з цих рядків містить два цілих числа через пробіл: P(1, j) та D(1, j). Наступні рядків описують другу програму у тому ж форматі: -й рядок містить P(2, j) та D(2, j). 1 \leq P(i, j) \leq 10, 1 \leq D(i, j) \leq 15000 (i = 1, 2; 1 \leq j \leq N).

Зверніть увагу, що можливо P(i, j) = P(k, l), тобто процедури та (k, l) не можуть виконуватись в один і той же час. Якщо i = k, це не має значення, оскільки вони належать одній програмі і повинні виконуватись послідовно.

Вихідні дані

У вихідних даних повинно бути рівно рядків, у кожному з яких одне число — мінімальний makespan для відповідного тесту. Виводьте відповіді у порядку, в якому дано тести (тобто -й рядок відповідає -му тесту).

Приклади

Приклад 1

Loading
Loading