Фермер Джон строит красивый сад, мы должны двигаться много грязи в этом процессе. Сад цветник , состоящий из N (1≤N≤100,000) , состоящий из
I-й Ai имеет цветник почвы начинается. Фермер Джон хочет изменить сад, так что каждый последний цветник имеет Bi почвы. Ай и Би являются диапазон 0 ... 10
целое число в нем. Для садоводства, фермер Джон имеет несколько вариантов: он может купить блок грязи и положить его в выборе цветника,
с деньгами X единиц. Он может очистить грязь от его выбора цветника, и отправлены деньгами Y единиц. Он может также использовать Z * | IJ | будет стоить один
битой почвы , транспортируемой из цветника цветника я к у. Рассчитать Farmer John завершил свою самую низкую общую стоимость облесения проектов.
Входные данные
В первой строке входного , содержащей N, X, Y и Z (0≤X, Y≤10 ^ 8; 0≤Z≤1000).
I + 1 строка содержит целое число от Ai и Bi.
Выход
Пожалуйста выход FJ нужно потратить на самой низкой общей стоимости озеленения.
Пример ввода
4 100 200 1
1 4
2 3
3 2
4 0
Пример вывода
210
Перевод: https: //blog.csdn.net/lyd_7_29/article/details/78306987
Может быть найден только в двух положениях: тип питания (аи> би), тип спроса (аи <би)
Так как Ai, Bi <= 10, так что он может быть разделен на позицию | аи-би | позиции одного и того же типа, так что предложение спрос и стал 1
рассматривать только позицию питания здесь
либо прямой выбор приобретения, или выбрать для перемещения
для перемещения, есть два: сопрягать фронт спроса, или за текущий спрос не двигается с матчем
предположит , что мы теперь соответствуем потребностям фронта, то конечно же жадный выбрать минимальное соответствие затрат, не ухудшая ответ, используя кучу нужно поддерживать
, однако, может лучше соответствовать назад, так что мы должны добавить значение в куче питания (для последующего отозвана)
# include < установлен > #include <cstdio> #include <CString> #include <алгоритм> #define о (я, а, б) для (INT I = а; г <= Ь; я ++) #define FD (я, б, а) для (INT I = Ь; я> = а; i--) #define ЭФО (I, V, и) для (INT I = последняя [v], и = к [I]; I; я = следующая [I], и = к [I]) #define макс (х, у) ((х)> (у)? (х) :( у)) #define мин (х, у) ((х) <(у) (х) :( у))? #define MSET (а, х) MemSet (а, х, SizeOf (а)) с использованием пространства имен STD; ЬурейеЕ долго долго LL; ЬурейеЕ двойной дб; символ ч; недействительное чтение ( INT & п) { п = 0 ; INT р = 1 ; для (ч = GetChar (); ч < ' 0 ' || ч> ' 9 ' ; гл = GetChar ()) , если (CH == ' - ' ) р = - 1 ; для (; ' 0 ' <= ч && ч <= ' 9 ' ; гл = GetChar ()) п = п * 10 + CH- ' 0 ' ; п * = р; } ИНТ п; LL А, В, С; мультимножеством <LL> s [ 2 ]; Int основных () { LL ANS = 0 ; чтения (п); зсапЕ ( " % LLD% LLD% LLD " , & А, & В, & С); ИНТ х, у; о (я, 1 , п) { чтения (х), чтение (у); е (вы, 1 , х, у) // питания { LL со = В; если (! s [ 1 ] .empty ()) { LL т = * с [ 1 ] .begin (); если (я * C + T < со) { а = C + I * т; с [ 1 ] .erase (с [ 1 ] .begin ()); } } с [ 0 ] .Вставьте (-i * C - CO); лет + = CO; } е (вы, 1 , уг) // спрос { LL со = А; если (! s [ 0 ] .empty ()) { LL т = * s [ 0 ] .begin (); если (я * C + T < со) { а = C + I * т; с [ 0 ] .erase (с [ 0 ] .begin ()); } } с [ 1 ] .Вставьте (-i * C - CO); лет + = CO; } } Е ( " % LLD " , ANS); вернуться 0 ; }