过不了样例
查看原帖
过不了样例
787888
Channel_Choo楼主2023/8/25 10:39
#include <iostream>
#include <string.h>
using namespace std;
int a[10][10];
bool vis[10][10];
int dx[8] = {1, -1, 0, 0, 1, -1, 1, -1};
int dy[8] = {0, 0, 1, -1, 1, 1, -1, -1};
int ans, maxx;
int n, m;
void dfs(int x, int y)
{
    if (y == m + 1)
    {
        dfs(x + 1, 1);
        return ;
    }
    if (x == n + 1)
    {
        maxx = max(ans, maxx);
        return ;
    }
    dfs(x, y + 1);
    if (!vis[x][y])
    {
        ans += a[x][y];
        for (int i = 0;i < 8;++i)
        {
            vis[x + dx[i]][y + dy[i]] = true;
        }
        dfs(x, y + 1);
        ans -= a[x][y];
        for (int i = 0;i < 8;++i)
        {
            vis[x + dx[i]][y + dy[i]] = false;
        }
        
    }
}
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
    	memset(a, 0, sizeof(a));
    	memset(vis, 0, sizeof(vis));
        cin >> n >> m;
        for (int i = 1;i <= n;++i)
        {
            for (int j = 1;j <= m;++j)

            {
                cin >> a[i][j];
            }
        }
        maxx = 0;
        dfs(1, 1);
        cout << maxx << endl;
    }
    return 0;
}

输入

3
4 4
67 75 63 10
29 29 92 14
21 68 71 56
8 67 91 25
2 3
87 70 85
10 3 17
3 3
1 1 1
1 99 1
1 1 1

正确输出

271
172
99

我的输出

690
182
103

2023/8/25 10:39
加载中...