Submission #880846

#TimeUsernameProblemLanguageResultExecution timeMemory
880846TAhmed33Selotejp (COCI20_selotejp)C++98
35 / 110
1066 ms8796 KiB
#include <bits/stdc++.h> using namespace std; int n, m; bool arr[1001][11]; vector <pair <int, int>> q; bool check (int &x, int &y) { return (x >> y) & 1; } bool vis[1 << 10][11][11][2]; void recurse (int pos, int mask, int newmask, int cur, int sum, bool c = 0) { if (vis[newmask][cur][sum][c]) return; vis[newmask][cur][sum][c] = 1; if (cur == m) { q.push_back({sum, newmask}); return; } if (arr[pos][cur] == 0) { recurse(pos, mask, newmask, cur + 1, sum, 0); return; } if (check(mask, cur)) { recurse(pos, mask, newmask + (1 << cur), cur + 1, sum, 0); } else { recurse(pos, mask, newmask + (1 << cur), cur + 1, sum + 1, 0); } recurse(pos, mask, newmask, cur + 1, sum + (c ^ 1), 1); } 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; memset(vis, 0, sizeof(vis)); recurse(pos, mask, 0, 0, 0); int mn = 1e9; vector <pair <int, int>> t = q; q.clear(); for (auto i : t) mn = min(mn, i.first + ans(pos - 1, i.second)); return ret = mn; } 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...