1 条题解

  • 0
    @ 2023-6-11 12:16:47

    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

    信息

    ID
    2301
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者