1 solutions

  • 0
    @ 2025-3-3 16:33:41

    C++ :

    #include<bits/stdc++.h>
    using namespace std;  
    //四个可以走的方向 
    int fx[5]={0,1,-1,0,0};  
    int fy[5]={0,0,0,1,-1};  
     
    //泳池的深度 
    int swim[110][110];  
     
    //标记是否走过 
    bool f[110][110];  
    int n,m,ans,s;  
    int p1,p2;
     
    int maxsum;
    //从x、y位置开始 
    void find(int x,int y,int sum)  
    {  
        
            if(sum>maxsum) maxsum=sum;
            //标记为走过 
            //遍历四个方向 
            for(int i=1;i<=4;++i)  
            {  
                //将要走到的位置 
                int dx=x+fx[i];  
                int dy=y+fy[i];  
                
                //如果将要走到的位置和本位置相同,且不越界 
                if(swim[x][y]<swim[dx][dy]&&dx>0&&dy>0&&dx<=n&&dy<=m&&!f[dx][dy]) {
                	f[dx][dy] = true;
            		find(dx,dy,sum+swim[dx][dy]); 
            		f[dx][dy] = false;
    			} 
            }  
         
         
    }  
    int main()  
    {  
        cin>>n>>m>>s;
     
        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= m;j++){
                s = (s * 345) % 19997;
                swim[i][j] = s % 10 + 1;
            }
        } 
     
        //循环从每个点开始回溯找最大面积 
        for(int i=1;i<=n;++i)  
            for(int j=1;j<=m;++j)  
            {
                maxsum=0;
                find(i,j,swim[i][j]);
    //            cout<<maxsum<<endl;
                ans=max(ans,maxsum);  
            }
                 
        cout<<ans<<endl;
        return 0;  
    }
    
    
    • 1

    Information

    ID
    10690
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By