codevs 1958 刺激
Posted 一入OI深似海
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs 1958 刺激相关的知识,希望对你有一定的参考价值。
/* 这题并不难 思路很简单 但是 如果记忆化的话 是会跪掉的 我们可能想到用01维护下次往上还是往下 但是我们忽略了 “每个的高度不得高于起点高度” 可能之前记忆化记下的与现在用到的高度不一样 */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,g[110][110],f[110][110][2],ans,limit; int xx[3]={0,0,1}; int yy[3]={0,1,0}; int Dfs(int x,int y,int p) { //if(f[x][y][p]!=1)return f[x][y][p]; for(int i=1;i<=2;i++) { int nx=x+xx[i]; int ny=y+yy[i]; if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&g[nx][ny]<=limit&& ((p==1&&g[nx][ny]>g[x][y])||(p==0&&g[nx][ny]<g[x][y]))) f[x][y][p]=max(f[x][y][p],Dfs(nx,ny,p^1)+1); } return f[x][y][p]; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&g[i][j]); f[i][j][0]=f[i][j][1]=1; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { limit=g[i][j]; ans=max(ans,Dfs(i,j,1)); ans=max(ans,Dfs(i,j,0)); } printf("%d\n",ans); return 0; }
以上是关于codevs 1958 刺激的主要内容,如果未能解决你的问题,请参考以下文章