•問題の意味
長さn sの文字列が与えられると、各$ S_ {I} $の$ A_ {I} $値を有します
あなたが最小値を削除してみましょう、シーケンス$のハードの$ stringが存在しないように
•アイデア
DPを設け[1] $さh $プレフィックスへの最小コストが存在しません
DP [2]、HA $ $接頭辞には存在しない、すなわち$の非存在下または不在時間$ $ $ A $または$ HAの最小コストは存在しません
同様に、DP [3] HARは$ $プレフィックスへの最小コストが存在しない場合、DPは、[4] $ $接頭ハード不在に最小限のコストであります
DP [i]はDPができる[I-1]に転送する、$のDP [I] =分(DP [I] +、DP [I-1])$
•コード
コードの表示1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#defineっ長い長 4 のconst int型 MAXN = 1E5 + 5 。 5 チャーS [MAXN]。 6 LL DP [ 5 ]。 7 のint main()の 8 { 9 INT N。 10 CIN >> N。 11 のscanf(" %sの"、S + 1 )。 12 のために(int型 i = 1 ; iが<= N; iが++ ) 13 { 14 LLのX。 15 CIN >> X。 16 であれば(S [I] == ' H ' ) 17 、DP [ 1 ] + = X。 18 他の 場合(S [I] == ' ' ) 19 DPは[ 2 ] =分(DP [ 2 ] + X、DP [ 1 ])。 20 他の場合(S [I] == ' R ' ) 21 、DP [ 3 ] =分(DP [ 3 ] + X、DP [ 2 ]); 22 他の 場合(S [I] == ' D ' ) 23 、DP [ 4 ] =分(DP [ 4 ] + X、DP [ 3 ])。 24 } 25 COUT << DP [ 4 ] << ENDL。 26 }