백준알고리즘
종이조각
먼지의삶
2019. 8. 11. 22:05
#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
같은경우도 있을거라는 생각이든다.