Submission #880858

#TimeUsernameProblemLanguageResultExecution timeMemory
880858TAhmed33Selotejp (COCI20_selotejp)C++98
70 / 110
1074 ms5316 KiB
#include <bits/stdc++.h> using namespace std; int n, m; bool arr[1001][11]; inline bool check (int &x, int y) { return (x >> y) & 1; } int ans (int pos, int mask); int recurse (int pos, int mask, int newmask, int cur, int sum) { if (cur == m) { return sum + ans(pos - 1, newmask); } int mn = 1e9; if (arr[pos][cur] == 0) { mn = min(mn, recurse(pos, mask, newmask, cur + 1, sum)); } else { if (check(mask, cur)) { mn = min(mn, recurse(pos, mask, newmask + (1 << cur), cur + 1, sum)); } else { mn = min(mn, recurse(pos, mask, newmask + (1 << cur), cur + 1, sum + 1)); } bool c = (cur != 0 && arr[pos][cur - 1] == 1 && check(newmask, cur - 1) == 0); mn = min(mn, recurse(pos, mask, newmask, cur + 1, sum + (c ^ 1))); } return mn; } string get2 (int x); int dp[1001][1 << 10]; int ans (int pos, int mask) { if (pos == 0) return 0; int &ret = dp[pos][mask]; if (ret != -1) return ret; return ret = recurse(pos, mask, 0, 0, 0); } string get2 (int x) { string s; for (int i = 0; i < m; i++) s += (char)(check(x, i) + '0'); return s; } int main () { memset(dp, -1, sizeof(dp)); cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 0; j < m; j++) { char x; cin >> x; arr[i][j] = x == '#'; } } cout << ans(n, 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...