Submission #1154098

#TimeUsernameProblemLanguageResultExecution timeMemory
1154098siewjhSelotejp (COCI20_selotejp)C++20
110 / 110
31 ms44356 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1e9 + 7; bool arr[1001][11]; int dp[1001][11][1024]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int rows, cols, p2c; cin >> rows >> cols; p2c = 1 << cols; for (int r = 1; r <= rows; r++){ for (int c = 0; c < cols; c++){ char ch; cin >> ch; arr[r][c] = (ch == '#'); } } dp[0][cols - 1][0] = 0; for (int b = 1; b < p2c; b++) dp[0][cols - 1][b] = inf; int cm = 0; for (int r = 1; r <= rows; r++){ for (int c = 0; c < cols; c++){ if (arr[r][c] != arr[r - 1][c]) cm ^= (1 << c); for (int b = 0; b < p2c; b++){ if ((cm | b) != cm) dp[r][c][b] = inf; else if (c == 0){ if (b & (1 << c)) dp[r][c][b] = min(dp[r - 1][cols - 1][b], dp[r - 1][cols - 1][b ^ (1 << c)] + 1); else dp[r][c][b] = min(dp[r - 1][cols - 1][b], dp[r - 1][cols - 1][b ^ (1 << c)]) + arr[r][c]; } else{ if (b & (1 << c)) dp[r][c][b] = min(dp[r][c - 1][b], dp[r][c - 1][b ^ (1 << c)] + 1); else dp[r][c][b] = min(dp[r][c - 1][b], dp[r][c - 1][b ^ (1 << c)]) + (arr[r][c] && (!arr[r][c - 1] || (b & (1 << (c - 1))))); } } } } int ans = inf; for (int b = 0; b < p2c; b++) ans = min(ans, dp[rows][cols - 1][b]); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...