タイトル[[SHOI2002]]スキー:https://www.luogu.com.cn/problem/P1434
メソッドの検索メモリもDPことができます。
ここで、Iは、優先キューがそれによって高い再発にローを実現、各高さのために格納されている使用して、DPを選択しました。
1の#include <iostreamの> 2の#include <アルゴリズム> 3の#include <キュー> 4 使用して 名前空間をSTD。 5 6 構造体ノード{ 7 int型I、J、NUM。 8 }。 9 構造体CMP1 { 10 ブール 演算子()(ノードX、ノードY){ 11 リターン x.num> y.num。 12 } 13 }。 14 int型 MAXN、R、C、F [ 110 ] [ 110 ]、G [ 110 ] [ 110 ]。 15 int型のmain(){ 16 PRIORITY_QUEUE <ノード、ベクトル<ノード>、CMP1> Q。 17 CIN >> R >> C。 18 のために(INT iが= 1 ; iが<= R; I ++ ){ 19 のために(INT J = 1 ; J <= C; J ++ ){ 20 CIN >> G [I] [J]。 21 F [I] [J] = 1 。 22 = I、AJ = J、a.num = aiをG [I] [J]。 23 q.push(A)。 24 } 25 } 26 INTI、J。 27 一方(q.size()){ 28 、A = q.top()。q.pop(); 29 私は=は、aiをJ = AJ; 30 であれば(G [I - 1 ] [J] <a.num)F [i]は[J] = MAX(F [I] [J]、F [I - 1 ] [J] + 1 )。 31 であれば(G [I + 1 ] [J] <a.num)F [i]は[J] = MAX(F [I] [J]、F [I + 1 ] [J] + 1 )。 32 であれば(G [I] [J + 1 ] <a.num)F [i]は[J] = MAX(F [I] [J]、F [i]は[J + 1 ] + 1 )。 33 であれば(G [I] [J- 1<a.num)F [i]は[J] = MAX(F [I] [J]、F [i]は[J- 1 ] + 1 )。 34 MAXN = MAX(MAXN、F [i]は[J])。 35 } 36 COUT << MAXN。 37 リターン 0 。 38 }