デイリー質問day59パンチ
分析
DPことを簡単に確認することができ、
DP [I](I、j)に示す[J [K] [0/1]、k番目のブラシ、0はブラシ、1つの意味ブラシことを示しています。
その後、転送があります:
再ブラシラインフィードに必ず1
2.同じ色の前にグリッドとグリッド場合は、最良の方法は、0の状態でもそのまま貪欲カウントが続いたときに、転送前にそのままの状態を置くことです。
DP [I] [J] [K] [1] = DP [I]、[J-1] [K] [1] +1。
DP [I] [J] [K] [0] = DP [I]、[J-1] [K] [0]。
K色の変更はブラシを犠牲(DOは、我々がグリッドに貢献1は必須である状態を設定することを忘れない)であり、他方は、色のグリッド上で継続することである:1 3.それ以外の場合は、そこに2つのオプションがあります
DP [I] [J] [K] [1] = MAX(DP [I]、[J-1] [K-1] [1] + 1、DP [I]、[J-1] [K] [0 ] +1)。
4.0このグリッドは、あなたが間違っを磨くために継続したい場合は、おそらくそのままに、その後、ブラシが間違ってブラシを作るかもしれない1から来る、さまざまに追いつくことがあるため、また貪欲。
DP [I] [J] [K] [0] = MAX(DP [I]、[J-1] [K] [1]、DP [I]、[J-1] [K-1] [0]) ;
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4の#include <アルゴリズム> 5の#include <キュー> 6 の#define INT長い長い 7 の#define(レジスタに対する担当者(I、S、E) INT iは秒=; <; ++ I)= E I 8 の#define = E I;(INT I = Sを登録するためのDWN(I、S、E)>; - i)が 9 使用して 名前空間STDを、 10インラインintはREAD() 11 { 12 INT X = 0、F = 1 。 13 チャー C = GETCHAR()。 14 一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')、F = - 1。C = GETCHAR();} 15 ながら(C> = ' 0 ' && C <= ' 9 '){X = X * 10 + C- ' 0 '。C = GETCHAR();} 16 リターン F * X。 17 } 18インラインボイドライト(int型X) 19 { 20 もし(X < 0){のputchar(' - ')。X = - X;} 21 場合(X> 9)書き込み(X / 10 )。 22 のputchar(Xの%10 + ' 0 ' )。 23 } 24 INT N、M、T、ANS。 25 のintマップ[ 51 ] [ 51 ]。 26 INT DP [ 51 ] [ 51 ] [ 2501 ] [ 2 ]。 27 符号付きmain()の 28 { 29 N =読み取る(); M =読み取る(); T = 読み取ります()。 30 担当者(I、1 、N) 31 担当者(J、1 、m)の 32 { 33 チャー C = GETCHAR()。 34 一方、(C =!' 0 ' && C =!' 1 ')C = GETCHAR()。 35 地図[I] [J] = C- ' 0 ' 。 36 } 37 担当者(I、1 、n)が 38 (J、担当者1 、M) 39 担当者(K、1、T) 40 { 41 であれば(J == 1 ) 42 { 43 DP [I] [J] [K] [ 0 ] = MAX(DP [I- 1 ] [M] [K- 1 ] [ 0 ]、 DP [I- 1 ] [M] [K- 1 ] [ 1 ])。 44 DP [I] [J] [K] [ 1 ] = MAX(DP [I- 1 ] [M] [K- 1 ] [ 0 ]、DP [I- 1 ] [M] [K- 1 ] [ 1 ])+ 1 。 45 } 46 他の 47 { 48 であれば(マップ[I] [J] ==マップ[I] [J- 1 ]) 49 { 50 DP [I] [J] [K] [ 1 ] = DP [I]、[J- 1 ] [K] [ 1 ] + 1 。 51 DP [I] [J] [K] [ 0 ] = DP [I]、[J- 1 ] [K] [ 0 ]。 52 } 53 他の 54 { 55 DP [I] [J] [K] [ 0 ] = MAX(DP [I]、[J- 1 [K-] 1] [ 0 ]、DP [I]、[J- 1 ] [K] [ 1 ])。 56 DP [I] [J] [K] [ 1 ] = MAX(DP [I]、[J- 1 [K-] 1 ] [ 1 ]、DP [I]、[J- 1 ] [K] [ 0 ] )+ 1 。 57 } 58 } 59の ANS = MAX(ANS、MAX(DP [I] [J] [K] [ 0 ]、DP [I] [J] [K] [ 1 ]))。 60 } 61 ライト(ANS)。 62 リターン 0 ; 63 }
してくださいギャングの論文(とにかく、私はその手段が論文のか分かりません)