广搜第二个点TLE,90分

P1434 [SHOI2002] 滑雪

homi @ 2023-08-06 15:41:05

#include <bits/stdc++.h>
using namespace std;
int r,c,a[105][105],b[105][105],f[4][2]={{0,1},{1,0},{-1,0},{0,-1}},ans;
int main()
{
    cin>>r>>c;
    for(int i=1;i<=r;i++)
      for(int j=1;j<=c;j++)
        cin>>a[i][j];
    for(int i=1;i<=r;i++)
      for(int j=1;j<=c;j++)
        b[i][j]=1;
    for(int i=1;i<=r;i++)
      for(int j=1;j<=c;j++)
      {
          queue<int>qx,qy;
          qx.push(i);
          qy.push(j);
          while(!qx.empty())
          {
              int ux=qx.front(),uy=qy.front();
              qx.pop();
              qy.pop();
              for(int k=0;k<4;k++)
              {
                  int x=ux+f[k][0],y=uy+f[k][1];
                  if(x>=0&&x<=r&&y>=0&&y<=c&&a[x][y]>a[ux][uy])
                  {
                      b[x][y]=max(b[ux][uy]+1,b[x][y]);
                      qx.push(x);
                      qy.push(y);                     
                  }
              }
          }         
      }
    for(int i=1;i<=r;i++)
      for(int j=1;j<=c;j++)
        ans=max(ans,b[i][j]);
    cout<<ans;
    return 0;
} 

by 啊吧怪 @ 2023-08-06 15:52:22

这题用bfs会T,好像很难优化到时间限制内


by homi @ 2023-08-07 11:25:47

@啊吧怪 谢谢 改深搜了


by abcaawtq @ 2023-09-23 22:44:56

@homi 要用记忆化搜索


|