羅区P4158 [SCOI2009]問題の画家・ソリューション

デイリー質問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 = - 1C = 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 }

してくださいギャングの論文(とにかく、私はその手段が論文のか分かりません)

おすすめ

転載: www.cnblogs.com/handsome-zyc/p/12039910.html