НОВ БЪЛГАРСКИ УНИВЕРСИТЕТ
Департамент Информатика
XVIIІ РЕПУБЛИКАНСКА СТУДЕНТСКА ОЛИМПИАДА ПО ПРОГРАМИРАНЕ
13 - 14 май 2006 г.
Метален прът трябва да бъде нарязан на няколко
парчета. Цената в лева за
извършване на едно отрязване е равна на дължината на рязания прът в
метри. В даден момент може да бъде правен само един разрез. Различни
стратегии за нарязване водят до различна цена.
Например да разгледаме прът с дължина 10 метра,
който
трябва да бъде
нарязан във 2-рия, 4-тия и 7-мия метър. Бихме могли да извършим това
като направим най-напред разрез в 2-ри метър, после в 4-ти метър и
накрая 7-ми метър. Това струва 10 + 8 + 6 = 24 лева. Друг подход може
да бъде да отрежем първо в 4-ти метър, после във 2-ри и в 7-ми метър.
Сега цената е 10 + 4 + 6 = 20 лева.
Да се напише програма A, която пресмята минималната
цена на нарязване на
прът с дадена дължина.
Вход.
Входът съдържа данни за няколко пръта. Първият ред
за
всеки тестов
случай съдържа положително число l
< 105, което представлява дължината на металния прът,
който трябва
да бъде нарязан. Вторият ред съдъжа положително число n < 104, задаващо
броя на
разрезите за този прът. Следващият ред съдържа n положителни числа ci, (0 < ci < l), задаващи местата, в които
трябва да бъдат направени разрезите. Прочитането на стойност l = 0 означава край на входа.
Изход.
Отпечатва се минималната цена на нарязване на
съответния прът по зададения формат в примера.
|
Примерен вход. 100 3 25 50 75 10 4 4 5 7 8 0 |
Изход. The minimum price is 200. The minimum price is 22. |