【noi707] LP

(以下に$呼ば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 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/PYWBKTDA/p/11619718.html