-
#include <iostream> #include <cstdio> using namespace std; int a[4][4]; int main() { int n, m; scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf("%1d", &a[i][j]); } } int ans = 0; // 0: -, 1 : | for (int s = 0; s < (1 << (n * m)); s++) { int sum = 0; for (int i = 0; i < n; i++) { int cur = 0; for (int j = 0; j < m; j++) { int k = i * m + j; if ((s & (1 << k)) == 0) { cur = cur * 10 + a[i][j]; } else { sum += cur; cur = 0; } } sum += cur; } for (int j = 0; j < m; j++) { int cur = 0; for (int i = 0; i < n; i++) { int k = i * m + j; if ((s & (1 << k)) != 0) { cur = cur * 10 + a[i][j]; } else { sum += cur; cur = 0; } } sum += cur; } ans = ans > sum ? ans : sum; } cout << ans << '\n'; return 0; }
못풀겠더라 그래서 그냥 답안지봤다.
보아하니, 0과 1로 세로, 가로방향을 나누고 그에따라 답안을 구해나가는방식인듯
처음에는 그냥 4 x 4일때, 4개가 최대값일거라 생각했는데
0 0 0 5
0 00 0
0 0 0 0
5 0 0 0
같은경우도 있을거라는 생각이든다.