P1879 [USACO06NOVトウモロコシフィールドトウモロコシフィールド[DPを等高線]

圧力暴力のように明らかに行います。しかし、データはもう一つの大きなTの安定を指摘します。理論の$ O(^ N4メートル)$が、実際の実行不満。

輪郭DP、セットする$ F(I、J、S)$は$(i、j)のために処理される考える$時間(このセルに決定されていない)場合$(に相当$ S $(の輪郭線を数正規のプログラムが低く持っているどのように多くの圧力上昇との$ M $のI、1 \ simのJ-1)$と$(I-1、jは\シムのメートル)$ $ S $)は、その後、$(I、Jを考えます)何$グリッドを埋めます。

とにかく、それは格子0、このプッシュの$ F(I、J + 1、S「)$を埋めることができます。グリッドまたは満たされたか、このセル内に障害物があるグリッド1に残っている場合、それはそうでなければ、1、$のF(I、J + 1、S「」)$への共感を埋めることができ、1を埋めることはできません。

ここで$ S 'およびS'「$第1のビット演算ビット$ Jは$ 0 $ / $ 1変換です。

次の行に開始状態として、この状態のエンドプッシュ輪郭線(J $ $ $ M $後端にリサイクル):詳細を考慮することに注意してください。それは、$ Fに向かっての$ F(I、M、S)$べき(i「はS、1,1 +)$です。

私たちは、オペレーティング改行などを避けるためのコードを見て、フレームによって直接プッシュダウンフレームの列をスクロールすることができます。

第二に、このDPは、私は、この操作の背中を埋めるために状態を押されても、違法を列挙、彼が正当であることを確認することであるため、彼は番組の数になります、一緒に隣接する違法を考慮する必要はありません。添加剤の効果を持ってする方法はありません、$ 0 $です。

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include <CStringの>
 4の#include <アルゴリズム>
 5の#include <cmath>
 6  の#define DBG(X)CERR << #X << "=" << X <<てendl
 7  使って 名前空間はstdを、
8 typedefの長い 長いLL。
9 typedefをダブルデシベル。
10のtypedef対< INTINT > PII。
11テンプレート<型名T>インラインT _min(TA、TB){ 戻り A <Bを?:B;}
 12テンプレート<型名T>インラインT _max(TA、TB){ 戻り A> B?:B;}
 13テンプレート<型名T>インラインチャー MIN(T&A、TB){ 戻り A> B(A = B、?1):0 ;}
 14テンプレート<型名T>インラインチャー MAX(T&A、TB) { 戻り <Bを(A = B、?1):0 ;}
 15テンプレート<型名T>インラインボイド _swap(T&A、T&B){A ^ = B ^ = A ^ = B;}
 16テンプレート<型名T>インラインTリード(T&X){
 17      、X = 0int型の F = 0 ;char型の C; しばらく(isdigit(C = getchar関数())!)の場合(C == ' - ')は、f = 1 ;
18      一方(isdigit(c)参照)、X = X * 10 +(C&15)、C = GETCHAR()。返す fはX = - ?X:X;
19  }
 20  のconst  int型 P = 1E8。
21  INTの MP [ 14 ] [ 14 ]、F [ 2 ] [ 1 << 12 ]。
22  int型M、N、今、TMP、ANS。
23  
24  INTメイン(){ //freopenは( "test.in"、 "R"、STDIN)。// freopenは( "test.ans"、 "W"、STDOUT)。
25      リード(N)、(m)を読み出します。
26      のために(登録をint i = 1 ; iは= N <; ++ I)のために(登録INT J = 1 ; J <= M; ++ j)を読み出す(MP [I] [J])。
27      F [ 0 ] [ 0 ] = 1 28      のために(登録をint i = 1 ; iが<= N ++ {I)
 29          のため(登録INT J = 1 ; J <= M;今^ = 1、++ J){
 30             (登録INT = K 0 ; <K 1 ++ K; << M)の場合(F [今] [K]){
 31                  INT P2 = K・(1 << J- 1)、P1 = jは== 10:K&(1 << J- 2 )。
32                  ?TMP = P2 K ^(1 << J- 1):K、[今^ F 1 [今] [K]、[今^ F] [TMP] + = F 1 ] [TMP]> = P &&( F [今^ 1 ] [TMP] - = P)。
33                  もし(MP [I] [J] && P1 &&!P2)
 34                      TMP = K |(1 <<1)、F [今^ 1 [今] [TMP] + = F [K]、F [今^ 1 ] [TMP]> = P &&(F [今^ 1 ] [TMP] - = P)。
35                  F [今] [K] = 0 ;
36              }
 37          }
 38      }
 39      (登録int型のk = 0 ; K < 1 << M; ++ K)[今] ANSは+ = F [k]を、ANS> = P &&(ans- = P)。
40      リターンのprintf(" %d個の\ n "、ANS)、0 41 }
コードの表示

理論$ O(NM2 ^メートル)$。

おすすめ

転載: www.cnblogs.com/saigyouji-yuyuko/p/11532869.html