Dog_Two @ 2017-12-06 19:10:18
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int mp[105][105];
int vis[105][105];
int n,m;
int ans;
int to[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int dfs(int mx,int my,int cnt){
if(vis[mx][my]!=-1) return cnt+vis[mx][my];
for(int i=0;i<4;i++)
if(mx+to[i][0]!=-1&&my+to[i][1]!=-1&&mp[mx+to[i][0]][my+to[i][1]]<mp[mx][my])
return dfs(mx+to[i][0],my+to[i][1],cnt+1)+1;
return 1;
}
int main()
{
memset(mp,-1,sizeof(mp));
memset(vis,-1,sizeof(vis));
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;i++)
for(register int j=1;j<=m;j++)
scanf("%d",&mp[i][j]);
for(register int i=1;i<=n;i++)
for(register int j=1;j<=m;j++)
ans=max(ans,dfs(i,j,0));
printf("%d",ans);
return 0;
}
↑完全错的记忆化 ↓暴搜
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int mp[105][105];
int n,m;
int ans;
int to[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void dfs(int mx,int my,int cnt){
ans=max(ans,cnt);
for(int i=0;i<4;i++)
if(mx+to[i][0]!=-1&&my+to[i][1]!=-1&&mp[mx+to[i][0]][my+to[i][1]]<mp[mx][my])
dfs(mx+to[i][0],my+to[i][1],cnt+1);
}
int main()
{
memset(mp,-1,sizeof(mp));
scanf("%d%d",&n,&m);
for(register int i=1;i<=n;i++)
for(register int j=1;j<=m;j++)
scanf("%d",&mp[i][j]);
for(register int i=1;i<=n;i++)
for(register int j=1;j<=m;j++)
dfs(i,j,0);
printf("%d",ans);
return 0;
}
by Dog_Two @ 2017-12-06 19:43:06
int dfs(int mx,int my,int cnt){
if(vis[mx][my]!=-1) return cnt+vis[mx][my];
for(int i=0;i<4;i++)
if(mx+to[i][0]!=-1&&my+to[i][1]!=-1&&mp[mx+to[i][0]][my+to[i][1]]<mp[mx][my])
return vis[mx][my]=dfs(mx+to[i][0],my+to[i][1],cnt+1)+1;
return vis[mx][mx]=1;
}
改完仍然错······
by wjy666 @ 2017-12-06 19:57:47
在首页看你这个讨论没有标题。。。
by Dog_Two @ 2017-12-06 20:05:09
@wjy666 我注意到了,今天签到说忌开电脑23333