J. Panguとストーンズ
効果:与えられたN- $ $石が積み重ね、$(N \ル100)石合わせ$ 1から$の合計$、少なくともスタック$ Lの$ $する$ R&LTスタックまでそれぞれ任意の連続動作が、組み合わされ配慮がマージシークヒープの最小コスト。
書式#include <iostreamの> の#include <sstream提供> する#include <アルゴリズム> 書式#include <cstdioを> する#include <math.h>の 書式#include <設定> 書式#include <マップ> 書式#include <キュー> の#include <string>に する#include < string.hの> の#include <ビットセット> の#define REP(I、N)のために(INT iは=; I <= N; ++ I) の#define PER(I、N)のための(iはint型= N; I> = A; - I) の#define時間({のprintf( "DP [%のD] [%のD] [%D] =%Dを\ n"、L、R、K、DP [L] [ R] [K])、プット( "");}) の#define PB一back の#define LC(O << 1) の#define RC(LC | 1) の#define中間((L + R)>> 1) #LSのLC、L、ミッド定義する 、の#define RSのRC、ミッド+ 1をR の#define X最初 の#define yの第二 の#define IOのstd :: IOS :: sync_with_stdio(偽) #define ENDL '\ N' の#define DB(A)({REP(__ I、1、n)はCOUT << [__ I] <<」「;時間;}) 名前空間stdを使用。 typedefの長い長いLL。 typedefのペア<int型、int型> PII。 CONST int型P = 1E9 + 7、P2 = 998244353、INF = 5E8。 LLのGCD(-1,11,11- b)は{戻りB GCD(B、%のB):;} のLL qpow(-1,11,11- n)で{LLのR = 1%P;(%= Pのために、N ; = *%P、N >> = 1)であれば(N - 1)R = R *%のP、リターンR;} ?LL INV(LL X){X <= 1を返す:INV(P%以下X)*(PP / X)%P;} インラインint型RD(){int型のx = 0; CHAR P = GETCHAR();一方、(P < '0' || P> '9')p = GETCHAR() ;一方、(P> = '0' && P <= '9')、X = X * 10 + P-'0' 、P = GETCHAR();戻りX;} //ヘッド のconst int型N = 110。 N INT、L、R、[N]。 INT DP [N] [N] [N]。 REP(I、1、N)のscanf( "%dの"、A + I)、[I] + = [I-1]; REP(D、1、n)のREP(K、1、N){ (; R <= N; int型のL = 1、R = L + D-1 ++ L、R ++)用{ INT&ANS = DP [L] [R] [K] = INF。 もし(K == 1){ IF(L == R)ANS = 0。 他の(R-L + 1 <L)であれば、 そうであれば、(R-L + 1 <= R)ANS = [R] -a [L-1]。 他{ REP(I、L、R)REP(J、L、R-1){ ANS =分(ANS、DP [L] [J] [1] + DP [J + 1] [R] [I- 1])。 } ANS + = [R] -a [L-1]。 } } 他{ REP(I、L、R-1)ANS =分(ANS、DP [L] [I] [1] + DP [I + 1] [R] [K-1])。 } } } のprintf( "%Dを\ n"、DP [1]〜[n]を[1]> = INF 0:DP [1]〜[n]を[1])。 } }