求助DALAO : 1个点WA , 其他RE
查看原帖
求助DALAO : 1个点WA , 其他RE
338117
CWJ1029楼主2020/5/7 19:26

代码如下

#include <bits/stdc++.h>
using namespace std;

int t , n[25] , m[25] , a[11][11][25] , boolint[11][11][25] , ans[25];
int dx[9] = {0 , 0 , 1 , 1 , 1 , 0 , -1 , -1 , -1};
int dy[9] = {0 , 1 , 1 , 0 , -1 , -1 , -1 , 0 , 1};

void in()
{
    scanf("%d" , &t);
    for (int i = 1; i <= t; i++)
    {
        scanf("%d%d" , &n[i] , &m[i]);
        for (int j = 1; j <= n[i]; j++)
            for (int k = 1; k <= m[i]; k++)
                scanf("%d" , &a[i][j][k]);
    }
}

void out()
{
    for (int i = 1; i <= t; i++)
        printf("%d\n" , ans[i]);
}

void dfs(int w , int x , int y , int p)
{
    if (x == n[w] && y == m[w])
        if (boolint[w][x][y])
        {
            ans[w] = max (ans[w] , p);
            return;
        }
        else
        {
            ans[w] = max(ans[w] , p + a[w][x][y]);
            return;
        }
    else
    {
        if (boolint[w][x][y])
        {
            if (y == m[w]) dfs(w , x + 1 , 1 , p);
            else dfs(w , x , y + 1 , p);
        }
        else
        {
            p += a[w][x][y];
            for (int i = 0; i < 9; i++)
            {
                int xn = x + dx[i];
                int yn = y + dy[i];
                boolint[w][xn][yn] = 1;
            }
            if (y == m[w]) dfs(w , x + 1 , y , p);
            else dfs(w , x , y + 1 , p);
        }
    }
}

int main()
{
    in();
    for (int i = 1; i <= t; i++)
        dfs(i , 1 , 1 , 0);
    out();
    return 0;
}
2020/5/7 19:26
加载中...