(以下に$呼ばSA = \ sum_ {jが= 1} ^ {I}のXIの\ CDOTが$をAI、のSb 及びScの共感)
Fオーダー[i]が[x]はI、$サ\ルX \ル前の数を表しますSB $最小Scの
i番目を選択するかどうかの考慮事項は、再帰$ fで得ることができる[I] [X] =分(F [I-1] [x]は、分(F [I-1] [XJ ])+ CI)$(J満足$ AI \ルJ \ルバイ $)、 この事は、単調なキューに保持することができる
(この転送の正しさはありません特に許可、考慮することが必要かつ十分使用することができます)
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#define N 1005年 4 の#define OO 0x3f3f3f3f 5 int型、T、N、M、L、R、[N]、B [N]、C [N]、Q [N * 10 [N] [N、F]、 * 10 ]。 6 INT メイン(){ 7 のscanf(" %dの"、&T)。 8 一方(t-- ){ 9 のscanf(" %D%dの"、&N、&M)。 10 のために(INT I = 1; iが<= N; iが++)scanf関数を(" %のD "、および[I])。 11 のために(int型 I = 1のscanf(; iが<= N I ++)は、 " %のD "、&B [I])。 12 のために(int型 i = 1 ; iが<= N; iが++)のscanf(" %dの"、&C [I])。 13 のために(int型 I = 1 ; I <= M; iが++)[F 0 ] [I] = OO。 14 F [ 0 ] [ 0 ] = 0 。 15 のための(int型i = 1 ; iは= <N; iは++ ){ 16 、L = 1 。 17 R = 0 。 18 のための(int型 J = 0 ; J <= Mであり、j ++ ){ 19 であれば([I] <= J){ 20 ながら((L <= R)&&(F [I- 1 ] [J] <= F [I- 1 ] [Q [R]))r--の。 21 Q [++ R] = J = 〔I〕。 22 } 23 ながら((L <= R)&&(Q [L] <JB [I]))L ++ 。 24 F [i] [j]はfは= [I- 1] [J]。 25 であれば(L <= R)F [i]は[J] =分(F [I] [J]、F [I- 1 ] [Q [L] + C [I])。 26 } 27 } 28 であれば(F [n]は[M] == OO)のprintf(" IMPOSSIBLE !!!の\ n " ); 29 他ののprintf(" %Dを\ n " 、F [n]は[M])。 30 } 31 }