# 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