ある日、アルゴリズムの問題 - 優先キュー

タイトル[[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 }

 

おすすめ

転載: www.cnblogs.com/zyyz1126/p/12669045.html