poj 1088(注意dp的時候,每次的len[i][j]的更新要在迴圈之外)
阿新 • • 發佈:2021-11-21
#include<iostream> #include<cstring> #include<cmath> using namespace std; #define maxn 105 int r,c; int data[maxn][maxn],len[maxn][maxn]; const int dx[]={-1,0,1,0},dy[]={0,-1,0,1}; int dp(int x,int y){ if(len[x][y]!=0) return len[x][y]; int m = 0; for(int k=0;k<4;k++){int px = x+dx[k]; int py = y+dy[k]; if(px<0||px>=r||py<0||py>=c)continue; if(data[px][py]<data[x][y]){ m = max(m,dp(px,py)); } } len[x][y] = m+1; return len[x][y]; } int main(){ scanf("%d%d",&r,&c); for(int i=0;i<r;i++){for(int j=0;j<c;j++){ scanf("%d",&data[i][j]); } } memset(len,0,sizeof(len)); for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ dp(i,j); } } int len_max = 0; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ len_max= max(len_max,len[i][j]); } } printf("%d\n",len_max); return 0; }