这题刚开始我想到的是搜索,但是超时了,所以要进行优化,听说这是dp经典题,当时就疯了,dp才初学,想到的是
dp[i,j]=max(dp[四个方向]);
lyon大神说不用递归,排序就好,不懂啊,我可耻的递归了,等等再学习学习!
我晕啊,发现我这个原来是用了dfs,我自以为是dp!虽然如此,
但写出来不太理想,主要是不懂的递归间数值的变化,导致一直出不来答案!
后来看题解啊,改啊,搞啊,许久才出来个能a的代码,并且还0ms了,看来还得多熟悉下
View Code
1 #include2 #include 3 #include 4 #include 5 #define INF 0x3f3f3f3f 6 #define Maxin 10000 7 int f[4][2]={ {-1,0},{ 0,-1},{ 1,0},{ 0,1}}; 8 int map[110][110]; 9 int v[110][110]; 10 int r,c,x,y;11 int dfs(int i,int j)12 {13 if(v[i][j]!=1)14 return v[i][j];//加了这个才没超时,为了防止重复计算的15 for(int z=0;z<4;z++)16 {17 int a=i+f[z][0];18 int b=j+f[z][1];19 if(a>=0&&a =0&&b map[i][j])//四方向探索,满足a b在图内,且高度满足条件21 {22 int k=dfs(a,b);//求出a b的最大长度23 if(v[i][j] max)50 max=v[x][y];51 // printf("%d ",v[x][y]);52 }53 // printf("\n");54 }55 printf("%d\n",max);56 return 0;57 }