5519: [Usaco2016 Открыть] Ландшафтный

Фермер Джон строит красивый сад, мы должны двигаться много грязи в этом процессе. Сад цветник , состоящий из 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 ;
}

 

рекомендация

отwww.cnblogs.com/cutemush/p/11684626.html