[CSP-Sシミュレーション試験]:ケーキ(セクションDP)

トピックポータル(内部タイトル34)


入力形式

最初の行、正の整数$ n $という。
第二行、$ N $正の整数で$ a_iを$、$ a_iを$等しく確実。


出力フォーマット

ラインはマミヤ卓司が得られたケーキの和の最大整数サイズを表します。


サンプル

サンプル入力1:

5
2 8 1 10 9

出力例1:

18

サンプル入力2:

8
1 10 4 5 6 2 9 3

サンプル出力2:

26


データ範囲とヒント

サンプル1点の説明:

最適解は:$ 2 $ブロックの卓司6月選択、最初の$ 1 $ブロックから選択された雨コウソース; $ 5 $ブロックの卓司6月選定; $ 4 $ブロックの群から選択される雨コウソース; $ 3 $ブロックの卓司6月の選択。

データ範囲:

$ 32 \%の$データについて、$ 1 \ leqslantのn個の\ leqslant 20 $。
$ 64個の\%の$のデータについては、$ 1 \ leqslantのn個の\ leqslant 30 $。
$ \ 100%の$データ、$ 1 \ leqslant N \ leqslantため 2,000,1 \ leqslant a_iを\ leqslant {10} ^ 9 $、 互いに等しく$その$のa_iをを確実にします。


問題の解決策

$ $ DP、定義された$のDPを考慮すると、[I] [J] $間隔はさらに缶を取ったパリティに応じて決定されたケーキの大きさと最大長さに仕上がっ$ [I、J] $を取得表します。

時間の複雑さ:$ \シータ(N ^ 2)$。

希望のポイント:$ $ 100ポイント。

実際のサブ:$ $ 100ポイント。


コードの時間

#include <ビット/ STDC ++ H> 
名前空間STDを使用して、
int型のn; 
長い長い[2010]。
長い長いDP [2010] [2010]。
長い長いANS; 
INT GET(int型X){IF(X> N)のx = N;戻りX;(!x)は、x + = Nであれば} 
長い長いDP(int型L、int型のR、int型X)
{ 
	IF(X> = n-1)は0を返します。
	IF(!DP [L] [R] = - 1)戻りDP [L] [R]。
	DP [L] [R] = 0; 
	INT LL = L、RR = R。
	INT LFT = GET(L-1)、RHT = GET(R + 1)。
	IF([LFT]> [RHT])L = LFT。
	他のR = RHT。
	LFT = GET(L-1)。
	RHT = GET(R + 1)。
	DP [LL] [RR] = MAX(DP(LFT、R、X + 2)+ [LFT]、DP(L、RHT、X + 2)+ [RHT])。
	DP [LL] [RR]を返します。
} 
int型のmain()
{ 
	memsetの(DP、-1、はsizeof(DP))。
	scanf関数( "%のD"、&N);
	(I 1 = int型、iが<= N; iが++)のためのscanf( "%のLLD"、および[I])。
	ANS = MAX(ANS、[I] + DP(I、I、1))のために(iは++; = n iは<I = 1 INT)。
	printf( "%のLLD"、ANS)。
	0を返します。
}

RP ++

おすすめ

転載: www.cnblogs.com/wzc521/p/11494076.html