Рюкзак-бинарная Оптимизированный

# include <cstdio> 
#include <CString> 
#include <алгоритм>
 с помощью  пространства имен STD;
INT п, т, ANS, CNT = 1 ;
INT F [ 1000005 ];
INT ш [ 1000005 ], v [ 1000005 ]; // 记得将数组开大
INT Основной () 
{ 
    Int а, Ь, с; 
    зсапЕ ( " % d% d " , & п, & м); 

    для ( INT I = 1 ; г <= п; ++ я) 
    { 
        зсапЕ ( " % d% d% d ", & А, & В, & С);
         для ( Int J = 1. , J <= C, J << = 1. ) 
        { 
            В [ ++ НКТ] = J * A, W [НКТ] = J * В; 
            С - = J; 
        } 
        ЕСЛИ (С) в [НСТ ++] = A * C, W [НКТ] * в = С;
         // бинарное оптимизация, сплит 
    } 

    для ( INT I = 1. ; I <= CNT; ++ I)
      , для ( INT J = т, J> = W [I]; - J) , 
      F [J] = тах (Р [J], F [JW [I]] + в [I]);
     // простой множественным рюкзак 
    Е ( "% d \ п " , е [м]);
     возврат  0 ; 
}

Он используется здесь бинарная Оптимизированный

Прежде всего, мы должны знать принципы бинарной оптимизации

19, к примеру, если мы разделимся на 1,2,4,8,3

Мы можем использовать номер пять шоу перед всеми числами от 1 до 19 лет

Тогда число пять как пришел его

В самом деле, при добавлении мощности меньше или равно (1,2,4,8) и номер 2, и что разность между числом (3)

Если мы оптимизировали двоичный файл для каждого элемента, вы можете увеличить сложность пространства и уменьшить сложность времени

Тема: https: //www.luogu.org/problemnew/show/P1776

Выдержка из: https: //dankuroto.blog.luogu.org/solution-p1776

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

отwww.cnblogs.com/kingderman/p/11232242.html