过不去样例

P1123 取数游戏

这才过两分钟,捞什么捞
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


|