CodeForces 1096D(リニアDP)

ポータル

•問題の意味

長さ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 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/MMMinoz/p/11493700.html
おすすめ