제출 #1224776

#제출 시각아이디문제언어결과실행 시간메모리
1224776nh0902Nafta (COI15_nafta)C++20
100 / 100
280 ms108200 KiB
#include <bits/stdc++.h> using namespace std; //#define int long long const int N = 2e3 + 10; const int M = 3e5 + 10; const int inf = 1e9; const int mod = 1e9 + 7; int R, S, a[N][N]; int sum[N][N]; bool id[N][N]; int cur, cur_sum; int dx[4] = {0, 0, 1, - 1}; int dy[4] = {1, - 1, 0, 0}; pair<int, int> dfs(int x, int y) { id[x][y] = cur; cur_sum += a[x][y]; int l = y; int r = y; for (int t = 0; t < 4; t ++) { int i = x + dx[t]; int j = y + dy[t]; if (0 < i && i <= R && 0 < j && j <= S && a[i][j] != - 1 && id[i][j] == 0) { pair<int, int> p = dfs(i, j); l = min(l, p.first); r = max(r, p.second); } } return {l, r}; } void prep() { cin >> R >> S; char c; for (int i = 1; i <= R; i ++) { for (int j = 1; j <= S; j ++) { cin >> c; if (c == '.') a[i][j] = - 1; else a[i][j] = c - '0'; } } for (int i = 1; i <= R; i ++) { for (int j = 1; j <= S; j ++) { if (a[i][j] == - 1 || id[i][j] > 0) continue; cur ++; cur_sum = 0; auto [l, r] = dfs(i, j); for (int k = l; k <= r; k ++) sum[k][l] += cur_sum; } } for (int i = 1; i <= S; i ++) { for (int j = S; j >= 1; j --) { sum[i][j] += sum[i][j + 1]; } } } int cost(int i, int j) { return sum[j][i + 1]; } int dp[N][N]; int ans[N]; void dvc(int l, int r, int x, int y, int k) { if (l > r) return; int m = (l + r) / 2; dp[m][k] = dp[x][k - 1] + cost(x, m); int otp = x; for (int i = x + 1; i <= min(m - 1, y); i ++) { if (dp[i][k - 1] + cost(i, m) > dp[m][k]) { dp[m][k] = dp[i][k - 1] + cost(i, m); otp = i; } } ans[k] = max(ans[k], dp[m][k]); dvc(l, m - 1, x, otp, k); dvc(m + 1, r, otp, y, k); } void solve() { for (int i = 1; i <= S; i ++) { dvc(1, S, 0, S, i); ans[i] = max(ans[i], ans[i - 1]); cout << ans[i] << "\n"; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); prep(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...