2 条题解

  • 1
    @ 2022-08-05 20:30:45

    观察数据6,可知题目考察爆搜。爆搜是一个人写码能力的表现,所以不要轻视。

    AC code

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    #define in inline
    #define rint register int
    typedef long long LL;
    typedef pair<int,int> PII;
    
    in int read()
    {
        rint x=0,f=0; register char ch=getchar();
        while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar();
        while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
        return f?-x:x;
    }
    
    /*----------code----------*/
    const int N=10;
    int a[N][N];
    int n,m;
    
    const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
    
    int res=-2e9;
    bool st[N][N];
    void dfs(int sx,int sy,int sum)
    {
        if(sx==n&&sy==m)
        {
            res=max(res,sum);
            return;
        }
        
        for(int i=0;i<4;i++)
        {
            int x=sx+dx[i],y=sy+dy[i];
            if(!x||x>n||!y||y>m) continue;
            if(st[x][y]) continue;
            
            st[x][y]=true;
            dfs(x,y,sum+a[x][y]);
            st[x][y]=false;
        }
    }
    
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                cin>>a[i][j];
        
        st[1][1]=1;
        dfs(1,1,a[1][1]);
        cout<<res;
        
        return 0;
    }
    
  • 0
    @ 2021-07-22 13:52:21

    dfs模板题。

    (对于部分分,如果\(n,m\)有一个奇数,则答案是\(n*m\),否则答案是\(n*m-1\))

    #include<bits/stdc++.h>
    using namespace std;
     
    int n,m;
    int a[15][15], vis[15][15];
    int sum = 0, ans = -99999999;
    int d[4][2] = {
        -1,0,
        1,0,
        0,-1,
        0,1
    };
    void dfs(int x,int y) 
    {
        if(x==0 || x>n || y==0 || y>m) return;
        if(x==n && y==m) 
        {
            ans = max(ans, sum);
            return;
        }
        
        for(int i=0;i<4;i++)
        {
            int dx = x + d[i][0], dy = y + d[i][1];
            if(vis[dx][dy]) continue;
            vis[dx][dy] = 1;
            sum += a[dx][dy];
            dfs(dx,dy);
            sum -= a[dx][dy]; 
            vis[dx][dy] = 0;
        }   
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
        sum=a[1][1]; vis[1][1] = 1; dfs(1,1);
        cout<<ans<<endl;
        return 0;
    }
    
  • 1

信息

ID
1286
难度
7
分类
(无)
标签
(无)
递交数
34
已通过
9
通过率
26%
被复制
6
上传者