这才过两分钟,捞什么捞
by Liyhzh_C202712 @ 2024-01-26 20:20:10
这才过四分钟,捞什么捞
by Assassin_HG @ 2024-01-26 20:23:14
@[shortintlonglong](/user/1045201)
bug帮你稍微找了找,要注意vis数组有可能会出现两个点都标记了同一个点,所以要用int存,具体看代码
```cpp
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <utility>
using namespace std;
int T, n, m;
const int N = 8;
int a[N][N];
int vis[N][N];
long long maxn = 0;
int x[8] = {-1, -1, -1, 0, 0, 1, 1, 1},
y[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
vector<pair<int, int> > v;
void dfs (int i, int j, long long sum)
{
if (j == m + 1)
{
dfs(i + 1, 1, sum);
return;
}
if (i == n + 1)
{
maxn = max(maxn, sum);
return;
}
dfs(i, j + 1, sum);
if (!vis[i][j])
{
for (int k = 0; k < 8; k++)
vis[i + x[k]][j + y[k]]++;
dfs(i, j + 1, sum + a[i][j]);
for (int k = 0; k < 8; k++)
vis[i + x[k]][j + y[k]]--;
}
}
int main ()
{
cin >> T;
while (T --)
{
maxn = 0;
cin >> n >> m;
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= m; j ++)
{
scanf("%d", &a[i][j]);
}
}
dfs(1, 1, 0);
cout << maxn << '\n';
}
return 0;
}
```
by Yuzilihhh @ 2024-01-26 21:01:22
感谢$dalao$,此帖结
by shortintlonglong @ 2024-01-26 21:06:10