Problema de esquí (fuente Luogu)
A primera vista, es el recuerdo de la búsqueda profunda + encontrado es realmente el caso
Codigo original:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,a[105][105],flag[105][105],maxx,t;
int dfs(int x,int y)
{
if(flag[x][y]!=0)
return flag[x][y];
t=0;
if(a[x][y]>a[x][y+1])
t=max(t,dfs(x,y+1));
if(a[x][y]>a[x][y-1])
t=max(t,dfs(x,y-1));
if(a[x][y]>a[x+1][y])
t=max(t,dfs(x+1,y));
if(a[x][y]>a[x-1][y])
t=max(t,dfs(x-1,y));
flag[x][y]=t+1;
return flag[x][y];
}
int main()
{
cin>>n>>m;
for(int i=0;i<=n+1;i++)
{
for(int j=0;j<=m+1;j++)
{
a[i][j]=1000000;
flag[i][j]=0;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dfs(i,j);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
maxx=max(maxx,flag[i][j]);
}
}
cout<<maxx;
return 0;
}
Pero esto solo puede ser 90 puntos. Es el primer dato cada vez.
Después de 4 días de reverencia, WA finalmente descubrió su propio problema [Sahua]
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int n,m,a[105][105],flag[105][105],maxx;
int dfs(int x,int y)
{
if(flag[x][y]!=0)
return flag[x][y];
flag[x][y]=1;
if(a[x][y]>a[x][y+1])
flag[x][y]=max(flag[x][y],dfs(x,y+1)+1); //万一刚好相等都是1
if(a[x][y]>a[x][y-1])
flag[x][y]=max(flag[x][y],dfs(x,y-1)+1); //要在判断时就+1
if(a[x][y]>a[x+1][y])
flag[x][y]=max(flag[x][y],dfs(x+1,y)+1);
if(a[x][y]>a[x-1][y])
flag[x][y]=max(flag[x][y],dfs(x-1,y)+1);
return flag[x][y];
}
int main()
{
cin>>n>>m;
for(int i=0;i<=n+1;i++)
{
for(int j=0;j<=m+1;j++)
{
a[i][j]=1000000;
flag[i][j]=0;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dfs(i,j);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
maxx=max(maxx,flag[i][j]);
}
}
cout<<maxx;
return 0;//最重要的一步
}
【Sahua ~~~】