UVa 10285 Longest Run on a Snowboard【记忆化搜索】

题意:和最长滑雪路径一样,

 1 #include<iostream>  
 2 #include<cstdio>  
 3 #include<cstring> 
 4 #include <cmath> 
 5 #include<stack>
 6 #include<vector>
 7 #include<map> 
 8 #include<set>
 9 #include<queue> 
10 #include<algorithm>  
11 #define mod=1e9+7;
12 using namespace std;
13 
14 typedef long long LL;
15 const int maxn=105;
16 int g[maxn][maxn],vis[maxn][maxn],d[maxn][maxn];
17 int dir[4][2]={-1,0,1,0,0,-1,0,1};
18 int n,m;
19 
20 int dfs(int x,int y){
21     if(d[x][y]) return d[x][y];//如果已经搜过这一点,则直接返回,不用再重复计算 
22     int ans=0;
23     for(int i=0;i<4;i++){ //四个 方向搜 
24         int nx=x+dir[i][0];
25         int ny=y+dir[i][1];
26         if(nx<1||nx>n||ny<1||ny>m) continue;//越界 
27         if(g[x][y]>g[nx][ny])
28         ans=max(ans,1+dfs(nx,ny));
29     }
30     
31     if(ans==0) return d[x][y]=1;
32     return d[x][y]=ans;    
33 }
34 
35 int main(){
36     int ncase,r,c;
37     char s[maxn];
38     scanf("%d",&ncase);
39     while(ncase--){
40         cin>>s;
41         cin>>n>>m;
42     
43     for(int i=1;i<=n;i++)
44         for(int j=1;j<=m;j++) cin>>g[i][j];
45         
46         memset(d,0,sizeof(d));
47         int tmp=0;
48                 
49         for(int i=1;i<=n;i++){
50             for(int j=1;j<=m;j++)
51              tmp=max(tmp,dfs(i,j));
52         }       
53         printf("%s: %d\n",s,tmp);
54     }
55     return 0;    
56 }
View Code

 

 

 

 

 

 

 

 

 

 

 

 

唉= =自己又敲一遍= =运行出来是错的,还对照着以前写的

真是挫爆了= =以后就算不会,也要自己敲一敲 加油--- go---go--go

posted @ 2015-04-01 18:53  sequenceaa  阅读(135)  评论(0编辑  收藏  举报