백준알고리즘

종이조각

먼지의삶 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

같은경우도 있을거라는 생각이든다.