http://poj.org/problem?id=1088
题目标题:滑雪
题目大意:给一个二维数组,求最长递减序列
#include<iostream>
#include<stdio.h>
using namespace std;
int m[105][105]={0};
int r,c;
int d[105][105]={0};
int dp(int a,int b){
if(d[a][b]>0) return d[a][b];
int left=0,right=0,up=0,down=0;
if(a+1<=r){
if(m[a+1][b]<m[a][b]) up=1+dp(a+1,b);
else up=1;
}
else up=1;
if(a-1>=1){
if(m[a-1][b]<m[a][b]) down=1+dp(a-1,b);
else down=1;
}
else down=1;
if(b+1<=c){
if(m[a][b+1]<m[a][b]) right=1+dp(a,b+1);
else right=1;
}
else right=1;
if(b-1>=1){
if(m[a][b-1]<m[a][b]) left=1+dp(a,b-1);
else left=1;
}
else left=1;
if(up<down) up=down;
if(up<left) up=left;
if(up<right) up=right;
return up;
}
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>m[i][j];
}
}
int re=0;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
d[i][j]=dp(i,j);
if(re<d[i][j]) re=d[i][j];
}
}
cout<<re<<endl;
return 0;
}