結果
問題 | No.2639 Longest Increasing Walk |
ユーザー |
|
提出日時 | 2024-02-21 00:04:18 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 165 ms / 2,000 ms |
コード長 | 890 bytes |
コンパイル時間 | 4,343 ms |
コンパイル使用メモリ | 256,648 KB |
最終ジャッジ日時 | 2025-02-19 18:12:21 |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 33 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace std;using ll = long long;#define rep(i,n) for(int i=0;i<(int)(n);i++)using mint = atcoder::modint998244353;int main(){int h,w;cin>>h>>w;vector<vector<int>> a(h,vector<int>(w));rep(i,h) rep(j,w) cin>>a.at(i).at(j);vector<pair<int,int>> p;rep(i,h) rep(j,w) p.push_back({i,j});sort(p.begin(),p.end(),[&](pair<int,int> x,pair<int,int> y){return a.at(x.first).at(x.second)<a.at(y.first).at(y.second);});vector<int> dd={0,1,0,-1,0};auto isok=[&](int x,int y){return 0<=x&&x<h&&0<=y&&y<w;};vector<vector<int>> dp(h,vector<int>(w,1));int ans=0;for(auto[x,y]:p){ans=max(ans,dp.at(x).at(y));rep(i,4){int nx=x+dd.at(i);int ny=y+dd.at(i+1);if(isok(nx,ny)&&a.at(x).at(y)<a.at(nx).at(ny)){dp.at(nx).at(ny)=max(dp.at(nx).at(ny),dp.at(x).at(y)+1);}}}cout<<ans<<endl;}