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); } }
相关文章推荐
- UVa:10285 Longest Run on a Snowboard
- uva 10285 Longest Run on a Snowboard(记忆化搜索)
- [DP 训练] Longest Run on a Snowboard, UVa 10285
- uva 10285 - Longest Run on a Snowboard(dp+记忆化搜索)
- UVA 10285 Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- UVa 10285 / POJ 1088 Longest Run on a Snowboard (记忆化搜索)
- 习题9-1 UVA 10285 Longest Run on a Snowboard 最长滑雪路径(记忆话搜索)
- UVa 10285 - Longest Run on a Snowboard
- uva 10285 Longest Run on a Snowboard
- UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)
- UVA 10285 - Longest Run on a Snowboard
- UVA 10285(p304)----Longest Run on a Snowboard
- UVA - 10285 Longest Run on a Snowboard
- POJ1088 滑雪 | UVa10285 - Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- UVa 10285 Longest Run on a Snowboard【记忆化搜索】
- UVa 10285 - Longest Run on a Snowboard
- uva10285 Longest Run on a Snowboard(dp之记忆化搜索 )
- UVA 题目10285 - Longest Run on a Snowboard(DP+记忆化搜索)