3. Динамично оптимиране

Братска подялба [8.2.2]

Двама братя трябва да си поделят комплект от n подаръка. Всеки подарък има стойност цяло положително число. Да се разделят подаръците на две части със стойности a и b, така, че |a - b| да има най-малка стойност.

Нека сумата от стойностите на всички подаръци е p. Правим масив c с p елемента, като c[i] = 1, ако i може да се получи като сума на някои подаръци, в противен случай c[i] = 0. Решението на задачата ще бъде индексът на най-близкия до p/2 ненулев елемент на c.

Нека стойностите на подаръците да са:
3, 2, 3, 2, 2, 77, 89, 23, 90, 11

Решение.
a = 136, b = 166

alanbob.cpp


Задача 3a. Справедливо разделяне на подаръци

Двама братя трябва да си поделят комплект от n подаръка. Всеки подарък има стойност цяло положително число. Да се разделят подаръците на две части със стойности a и b (a <= b), така, че |a - b| да има най-малка стойност. Да се определи кои подаръци дават стойност a.

Вход
На стандартния вход се чете цяло число (не по-голямо от 100) - брой на примерите, съдържащи се във входа. За всеки пример се задава броят на предметите n (n < 1000) и след това на следващите редове стойностите им (n положителни числа, не по-големи от 1000).

Изход
На стандартния изход се отпечатват решенията на примерите от входа, като на един ред се отпечатва решението на еди пример. Та се състои от две числа - първото число е търсената стойност a, а второто число е n-цифрено двоично число (низ от нули и единици), който показва кои предмети за взети, за да се получи стойността a.

Пример.
2
10

3 2 3 2 2 77 89 23 90 11
2
8 80
Решение на примера.
136 1111100111
8 10

Задачи със сортировки

Задача 3b. Речници

Даден е опростен българо-английски речник, като на една ангрийска дума съответстват няколко български думи. Използвайки дадените съответствия, създайте българо-английски речник, така, че думите в двата речника да са едни и същи.

Вход
На стандартния вход се чете английската дума и след тире на същия ред са написани идна или няколко български думи, раздалани със запетаи. Думите са написани с малки латински и български букви. и са подредени по азбучен ред на английските думи. Българските съответствия също са по азбучен ред.

Изход
На стандартния изход се отпечатват по азбучен ред всички български думи, коите се срещат на входа - по една българска дума на ред, тире и една или няколко английски думи - като съответствията са от  входа и английските думи във всеки ред са подредени по азбучен ред.

Пример за вход

good - добър, приятен, хубав,
pleasant - любезен, приятен
pretty - хубав

Изход - решение на примерния вход

добър - good
любезен - pleasant
приятен - good, pleasant
хубав - good, pretty

Задача 3c. Странна математика
http://judge.openfmi.net/bcpc/G.htm