ACM-ICPC 2017北京

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])。
	} 
}

 

おすすめ

転載: www.cnblogs.com/uid001/p/10968900.html