其实昨天也在写,只是全都wa了。。。好不容易过了滑雪。总的来讲是记忆化搜索与dp,卡在了递推的写法上。还是没有具体理解。最后莫名其妙写成了dfs,果不其然超时了。目前理解是,开始所有点清0从一个起始点开始,起始点vis为四周比他低的点中vis最大值加一。开始所有点都为0?没关系 dp(x + dx[i],y + dy[i]); vis[x][y] = max(vis[x][y],vis[x + dx[i]][y + dy[i]]+ 1);dxdy只是简单的循环遍历。这样每个都能找下去,直到没有符合的点。 if(vis[x][y] > 0)
return vis[x][y];还有这一句,放在递归开头。我这里写的有些多余,对于全局数组记录,return值没有必要,为空也行。不过有返回值也可以在递归中写的方便一点,不用分成两句。
又写了道并查集,中间虽然问题不断,不过最后也a了,对并查集的理解并没有问题。