トピックリンク:https://codeforces.com/problemset/problem/1083/E
私は数ドルを書きたかった、と傾きがボードを片付けるだけスロープDPをやったやった、最適化さdpにあることがわかりました。
サブサブ(下位)凸包上の斜面DP最適化凸包とほぼメンテナンスに感じ。
1 // F [J] = YI * XJ +のWi - XI * YI + Fiを、 2 // 维护上凸包、斜率递减 3の#include <ビット/ STDC ++ H> 4 使って 名前空間STDを、 5 typedefの長い 長いLL。 6 CONST INT N = 1E6 + 9 。 7 構造体ポイント{ 8 LLのX、Y、W。 9 ブール 演算子 <(constのポイント&B)のconst { 10 リターン X < BX。 11 } 12 } [N]。 13 LL Q [N]、F [N]。 14 二重 CAL(INT I、INT J){ 15 リターン 1.0 *(F [J] - F [I])/([J] .X - [I] .X)。 16 } 17 int型のmain(){ 18 INT N。scanf関数(" %のD "、&N) 19 のために(INT iは= 1 ; iが<= N; ++ I)のscanf(" %LLD%LLD%LLD "、および[I] .X、&[I] .Y、および[I] .W)。 20 ソート(+ 1、+ 1 + N)。 21 INTL = 1、R = 1 。 22 LL ANS = - 1000000000000000 。 23 のために(INT iは= 1 ; iが<= N; ++ i)が{ 24 、一方(L <R && CAL(Q [L]、Q [L + 1 ])> = [I] .Y)++ L ; 25 INT J = Q [L]。 26 F [I] = F [J] - [I]・Y * [J] .X - [I] .W + [I]・X * [I] .Y。 27の ANS = MAX(ANS、F [I])。 28 一方(L <R && CAL(Q [R- 1 ]、Q [R])<= CAL(Q [R]、I)) - R。 29 Q [++ R] =私; 30 } 31 のprintf(" %のLLD " 、ANS)。 32 }