1. 程式人生 > 其它 >poj 1088(注意dp的時候,每次的len[i][j]的更新要在迴圈之外)

poj 1088(注意dp的時候,每次的len[i][j]的更新要在迴圈之外)

#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; }