TLE求助
查看原帖
TLE求助
1034090
flysailer楼主2024/10/14 16:57
#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,s[101][101],ans1=0,ans2=999999;
int xx[5]={0,1,-1,0,0},yy[5]={0,0,0,1,-1};
int mn[22][22],f[22][22],ma[22][22];
void dfs(int x,int y,int z){
    if(z>ans2){
       if(f[x][y]<ma[x][y])
          return ;
    }
    if(x==1&&y==n){
        if(z>ans1){
            ans1=z;
            memcpy(ma,f,sizeof(f));
        }
        if(z<ans2){
            ans2=z;
            memcpy(mn,f,sizeof(f));
        }
        return ;
    }
    for(int i=1;i<=4;i++)
        if(s[x+xx[i]][y+yy[i]]==1&&x+xx[i]>=1&&x+xx[i]<=n&&y+yy[i]>=1&&y+yy[i]<=n){
            s[x+xx[i]][y+yy[i]]=0;
            z++;                       //要单独提出来++
            f[x+xx[i]][y+yy[i]]=z;
            dfs(x+xx[i],y+yy[i],z);
            z--;
            s[x+xx[i]][y+yy[i]]=1;
            f[x+xx[i]][y+yy[i]]=0;
        }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            s[i][j]=1;
    for(int i=1;i<=m;i++){
        cin>>a>>b;
        s[a][b]=0;
    }
    s[n][1]=0;
    dfs(n,1,1);
    cout<<ans1-ans2;
    return 0;
}
```c
2024/10/14 16:57
加载中...