羅区$ 1541 $ $ $ DPリニアチェスのカメ

Luogu CH  

 

ソル

F [i]はi番目の格子が行ったときに得られる最大スコアを表します

数に関連する各カードをクロール転移、わずか4枚のカードの合計

だから、4枚のカードはまた、[I] [A] [B] [C] [D] fは、シートの状態番号に入れている入れ...

見つかりました知っている、Fのみ残しiは減算さ寸法ようにiが知られているB、C、D、[A] [B] [C] [D]

要約すると、最終的な状態は、[A]はFであり、[B]、[C]、[D] 1 .....最大スコアカード2 Bで、得られたシートをシートのカードを表します

転送することができ、カードの使用を列挙するために転送

 

コード

1の#include <iostreamの>
 2の#include <cstdioを>
 3  の#define行く(私は、u、v)がため(; I <= V iは++ INT I = Uレジスタ)
 4  使用して 名前空間STDを、
5  int型リード()
 6  {
 7    INT X = 0、Y = 1チャー C = GETCHAR()。
8    一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')Y = - 1 ; C = GETCHAR();}
 9    しばらく(> = C ' 0 ' && C <= ' 9 '){X =(x << 3)+(X << 1)+ C- ' 0 ' ; C = GETCHAR();}
 10    リターンのx *のY。
11  }
 12  int型 N、M、[CD 5 ]、皮下[ 360 ]、F [ 50 ] [ 50 ] [ 50 ] [ 50 ]。
13  のint main()の
 14  {
 15    N =(読み取り); M = (読み取り)
16    ゴー(I、1、n)はSC [I] =読む();
17    ゴー(I、1、M){ int型のx =リード(); CD [X] ++ ;}
 18    F [ 0 ] [ 0 ] [ 0 ] [ 0 ] = SC [ 1 ]。
19    ゴー(0は、CDが[ 1 ])行く(B、0、CD [ 2 ])
 20    ゴー(C、0、CD [ 3 ])行く(D、0、CD [ 4 ]){
 21      、INT X = * 1 + B * 2 + C * 3 + D * 4 + 1 22      であれば(A> 0)F [A] [B] [C] [D] = MAX(F [A] [B] [C] [D]、F [A- 1 ] [B] [C] [ D] + SC [X])。
23      であれば(B> 0)F [A] [B] [C] [D] = MAX(F [A] [B] [C] [D]、F [A] [B- 1 ] [C] [ D] + SC [X])。
24      場合(C> 0)F [A] [B] [C] [D] = MAX(F [A] [B] [C] [D]、F [A] [B] [C- 1 ] [ D] + SC [X])。
25      であれば(D> 0)F [A] [B] [C] [D] = MAX(F [A] [B] [C] [D]、F [A] [B] [C] [D- 1 ] + SC [X])。
26    }
 27    のprintf(" %dの"、F [CD [ 1 ] [CD [ 2] [CD [ 3 ] [CD [ 4 ])。
28    リターン 0 ;
29 }
コードの表示

おすすめ

転載: www.cnblogs.com/forward777/p/11009589.html
おすすめ