求大佬指点一下,找不到哪里错了
查看原帖
求大佬指点一下,找不到哪里错了
1267057
aa2211034566楼主2024/3/3 22:51
#include<bits/stdc++.h>
using namespace std;
int t,xx[7],yy[7],data[21][21];
int sum=0;
int xxx[8]={-1,-1,-1,0,0,1,1,1};
int yyy[8]={-1,0,1,-1,1,1,0,-1};
int vist[21][21]={0};

void dfs(int number,int x,int y,int ct){
    sum=max(sum,ct);
    if(y==yy[number]+1){
        dfs(number,x+1,1,ct);
        return ;
    }
    if(x==xx[number]+1){
        sum=max(ct,sum);
        return ;
    }
    dfs(number,x,y+1,ct);
    int flag=0;
    for(int i=0;i<8;i++){
        int dx=x+xxx[i];
        int dy=y+yyy[i];
        if(vist[dx][dy]==1&&dx>=1&&dx<=xx[number]&&dy>=1&&dy<=yy[number]){
            flag=1;
            break;
        }
    }
    if(flag==0){
        for(int i=0;i<8;i++){
            int dx=x+xxx[i];
            int dy=y+yyy[i];
            if(dx>=1&&dx<=xx[number]&&dy>=1&&dy<=yy[number]){
                vist[dx][dy]=1;
            }
        }
        ct=ct+data[x][y];
        dfs(number,x,y+1,ct);
        for(int i=0;i<8;i++){
            int dx=x+xxx[i];
            int dy=y+yyy[i];
            if(dx>=1&&dx<=xx[number]&&dy>=1&&dy<=yy[number]){
                vist[dx][dy]=0;
            }
        }
        ct=ct-data[x][y];
    }
}

int main(){
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>xx[i]>>yy[i];
        memset(data,0,sizeof(data));
        memset(vist,0,sizeof(vist));
        sum=0;
        for(int j=1;j<=xx[i];j++){
            for(int k=1;k<=yy[i];k++){
                cin>>data[j][k];
            }
        }
        dfs(i,1,1,0);
        cout<<sum<<endl;
    }
    return 0;
}

2024/3/3 22:51
加载中...