神ダイ疑問、我々はチェーン+リングの徒歩数枚ある実施形態を観察しなければなりません。
その後、リングは、括弧のセットとして見ることができる、DPに基づいて配列するようブラケット。
コード:
<ビット/ STDC ++ H>の#include の#define LL長い長 の#define N 3040 の#define setIO(S)freopenは(S ".IN"、 "R"、標準入力) 名前空間stdを使用。 INT、N、T。 INT L0 [N]、L1 [N]、R0 [N]、R1 [N]、F [N]、[N]。 INTメイン() { // setIO( "入力")。 私は、jはint型。 scanf関数( "%D%D"、&N、&T)。 memsetの(F、0x3fを、はsizeof(F))。 ための式(I = 1; iが<= N; ++ I) のscanf( "%D%D%D%D"、およびL0 [I]、および[I] R1、&R0 [i]は、&L1 [I])。 F [0] [0] = 0; ため(I 1 =、iが<= N; ++ i)が { ため(J = 0であり、j <= N; ++ j)は { IF(J) { F [I] [J] =分(F [I] [J]、F [I-1]〜[J] + J * 2 * T + R0 [I] + L1 [I])。 } F [I] [J] =分(F [I] [J]、F [I-1]〜[J] + J * 2 * T + L0 [I] + R1 [I])。 F [I] [J] =分(F [I] [J]、F [I-1] [J + 1] +(J + 1)* 2 * T + L0 [I] + L1 [i])と; } (j = 1; J <= N; ++ j)のためのF [I] [J] =分(F [I] [J]、F [i]は[J-1] + R0 [I] + R1 [私]); F [I] [J] =分(F [I] [J]、F [i]は[J + 1] + L0 [I] + - (J; J> = 0 J = N-1)のためのL1 [I])。 } のprintf( "%dの"、F [N] [0] +(N + 1)* T)。 0を返します。 }