最終的な答えは順序に関係なく、形のxy + yz平面+ XZを見つけました
最適化の見かけのスロープDP
ピット分母がINF 0としてスロープでないとき-INFように、すなわち直接分岐間違っについて
なぜなら、この小さなエッセイチューン午後のLvはピット......
スロープの最適化の力、深い理解(霧
書式#include <iostreamの> の#include <cstdioを> 使用して 名前空間はstdを、 const int型 MAXN = 100005 ; const int型 MAXM = 205 ; int型nは、mは、[MAXM] [MAXN】予め、Q [MAXN]。 長い 長い int型S [MAXN]、DP [MAXM] [MAXN]。 ボイド do_it(INT X){ int型 LL = 1、RR = 0 、I、Y、Z。 ため(I = X- 1 ; iが<= N; iは++ ){ Y = Q [LL]。Z = Q [LL + 1 ]。 同時に(LL <RR && ((DP [X - 1 ] [Y] -s [Y] * S [Y]) - (DP [X- 1 ] [Z] -s [Z] * S [Z]) < S [i]は*(S [Z] - S [Y]) || S [z]は== S [Y]) ){ LL ++ 。 Y = Q [LL]。Z = Q [LL + 1 ]。 } であれば(LL <= RR){ Y = Q [LL]。 DP [X] [I] = DP [X- 1 ] [Y] + S [Y] *(S [I] - S [Y])。 事前[X] [I] = Y。 // COUT << LL <<」 '<< RR <<'; '<< Y <<' // COUT << DP [X] [I] << ENDL。 } 、Y = Q [RR- 1 ]。Z = Q [RR]。 一方、(LL <RR && ((((DP [X - 1 [Y] -s [Y] * S [Y]) - (DP [X-] 1 ] [Z] -s [Z] * S [Z ]))*(S [I] - S [Z]) >((DP [X- 1 ] [Z] -s [Z] * S [Z]) - (DP [X- 1 ] [I] - S [I] * S [I]))*(S [Z] - S [Y]) !&& S [Z] = S [Y])|| S [I] == S [Z]) ){ RR - ; Y = Q [RR- 1 ]。Z = Q [RR]。 } RR ++; Q [RR] = I。 } を返します。 } int型のmain(){ int型I、T。 CIN >> N >> M。 M ++ ; 用(i = 1 ; iが<= N; iは++ ){ CIN >> S [i]は、S [i]は+ = S [I- 1 ]。 } のための(I = 2 ; I <= M; iは++)do_it(I)。// coutの<<てendl; COUT << DP [M] [N] << ENDL。 T = N。 用(; I> = I = M 2 ; i-- ){ coutの <<前の[i]を[T] << ' ' ; T = あらかじめ[I] [T]。 } COUT << ENDL。 リターン 0 ; }