您的位置:首页 > 其它

UVA -- 10285 Longest Run on a Snowboard

2015-04-26 17:38 411 查看
代码实现:

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
#include<iostream>
#define Min(a,b) ((a)<(b)?(a):(b))
#define Max(a,b) ((a)>(b)?(a):(b))
#define MEM(a) (memset((a),0,sizeof(a)))
#define MEME(a) (memset((a),-1,sizeof(a)))
#define MEMX(a) (memset((a),0x3f,sizeof(a)))
using namespace std;
const int N=10005;
int mp[105][105],dp
,g
[5],r,c;
int dfs(int i){
int& ans=dp[i];
if(ans>0) return ans;
ans=1;
for(int j=0;j<4;++j)
if(g[i][j]) ans=Max(ans,dfs(g[i][j])+1);
return ans;
}
int main(){
int t;
char s[30];
scanf("%d",&t);
while(t--){
scanf("%s%d%d",s,&r,&c);
MEM(dp),MEM(g);
int p1,n=r*c,slide=0;
for(int i=1;i<=r;++i)
for(int j=1;j<=c;++j) scanf("%d",&mp[i][j]);
for(int i=1;i<=r;++i){
for(int j=1;j<=c;++j){
p1=(i-1)*c+j;
if(i-1>0&&mp[i][j]>mp[i-1][j]) g[p1][0]=p1-c;
if(i+1<=r&&mp[i][j]>mp[i+1][j]) g[p1][1]=p1+c;
if(j-1>0&&mp[i][j]>mp[i][j-1]) g[p1][2]=p1-1;
if(j+1<=c&&mp[i][j]>mp[i][j+1]) g[p1][3]=p1+1;
}
}
for(int i=1;i<=n;++i)
slide=Max(slide,dfs(i));
printf("%s: %d\n",s,slide);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: