P1434 [SHOI2002]滑雪 題解
阿新 • • 發佈:2021-07-14
題目傳送門
我記得我剛學OI時教練wangk就講過,鴿到現在才寫與其是弱智題解,不如說是紀念
還挺簡單的,就是個記憶法搜尋模板題
#include<algorithm> #include<bitset> #include<cctype> #include<cerrno> #include<clocale> #include<cmath> #include<complex> #include<cstdio> #include<cstdlib> #include<cstring> #include<ctime> #include<deque> #include<exception> #include<fstream> #include<functional> #include<limits> #include<list> #include<map> #include<iomanip> #include<ios> #include<iosfwd> #include<iostream> #include<istream> #include<ostream> #include<queue> #include<set> #include<sstream> #include<stack> #include<stdexcept> #include<streambuf> #include<string> #include<utility> #include<vector> #include<cwchar> #include<cwctype> #include<chrono> #include<random> #include<unordered_map> using namespace std; #define ll long long #define ull unsigned long long #define rll register long long #define ri register int //#define int long long const int N=110; const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; int r,c,ans; int m[N][N],l[N][N]; inline ll read(){ ll x=0,y=1; char c=getchar(); while(c<'0'||c>'9'){ if(c=='-') y=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } return x*y; } inline int dfs(int x,int y){ if(l[x][y]) return l[x][y]; l[x][y]=1; for(ri i=0;i<=3;i++){ int vx=x+dx[i],vy=y+dy[i]; if(vx>0&&vy>0&&vx<=r&&vy<=c&&m[x][y]>m[vx][vy]){ dfs(vx,vy); l[x][y]=max(l[x][y],l[vx][vy]+1); } } return l[x][y]; } signed main(){ r=read(),c=read(); for(ri i=1;i<=r;i++) for(ri j=1;j<=c;j++) m[i][j]=read(); for(ri i=1;i<=r;i++) for(ri j=1;j<=c;j++) ans=max(ans,dfs(i,j)); printf("%d",ans); return 0; } ```