liujiayuan @ 2019-02-05 16:21:28
#include<iostream>
#include<cstring>
using namespace std;
int t,r,c,s[105][105]={0},dp[105][105]={0},X[4]={0,1,0,-1},Y[4]={1,0,-1,0},ans=-100;
string a;
int dfs(int x,int y)
{
if(dp[x][y])
{
return dp[x][y];
}
for(int i=0;i<4;i++)
{
int q=x+X[i];
int p=y+Y[i];
if(q<0||p<0||q>r||p>c)
{
continue;
}
if(s[q][p]<s[x][y])
{
dp[x][y]=max(dp[x][y],dfs(q,p)+1);
}
}
return dp[x][y];
}
int main()
{
cin>>r>>c;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cin>>s[i][j];
}
}
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
ans=max(ans,dfs(i,j));
}
}
cout<<ans+1<<endl;
return 0;
}
by Hexarhy @ 2019-02-05 16:30:30
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int dx[8]={0,0,1,-1};
const int dy[8]={1,-1,0,0};
const int MAXN=500;
int n,m,ans;
int a[MAXN][MAXN];
int f[MAXN][MAXN];
namespace mine
{
int read(void)
{
int num=0;
bool negative=false;
char c=getchar();
while(!isdigit(c) && c!='-')
c=getchar();
if(c=='-')
negative=true;
else
num=c-'0';
c=getchar();
while(isdigit(c))
{
num=(num<<1)+(num<<3)+(c^48);
c=getchar();
}
return negative?0-num:num;
}
}
int dfs(int x,int y)
{
if(f[x][y])
return f[x][y];
int t=1;
for(int i=0;i<4;i++)
{
const int xx=x+dx[i];
const int yy=y+dy[i];
if(xx>=1 && xx<=n && yy>=1 && yy<=m && a[x][y]<a[xx][yy])
t=max(dfs(xx,yy)+1,t);
}
f[x][y]=t;
return t;
}
void input(void)
{
using namespace mine;
n=read();
m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=read();
}
void solve(void)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int t=dfs(i,j);
f[i][j]=t;
ans=max(ans,f[i][j]);
}
}
int main()
{
input();
solve();
cout<<ans;
return 0;
}
码风清奇……