반응형

https://www.acmicpc.net/problem/14391

 

14391번: 종이 조각

영선이는 숫자가 쓰여 있는 직사각형 종이를 가지고 있다. 종이는 1×1 크기의 정사각형 칸으로 나누어져 있고, 숫자는 각 칸에 하나씩 쓰여 있다. 행은 위에서부터 아래까지 번호가 매겨져 있고,

www.acmicpc.net

 

종이를 가로, 세로로 확장시키면서 모든 경우에 대해서 합을 구해줬습니다.

#include <cstdio>
int n, m, p[4][4], ans = -1;
bool v[4][4];
void f(int x, int y, int s) {
	if (x >= n) {
		if (ans < s) ans = s;
		return;
	}
	int nx = y == m - 1 ? x + 1 : x;
	int ny = (y + 1) % m;
	if (v[x][y]) f(nx, ny, s);
	else {
		v[x][y] = 1;
		f(nx, ny, s + p[x][y]);
		int i, val = p[x][y];
		for (i = x + 1; i < n && !v[i][y]; i++) { // 세로 확장
			val = val * 10 + p[i][y];
			v[i][y] = 1;
			f(nx, ny, s + val);  
		}
		while (i-- && i >= x + 1) v[i][y] = 0;
		for (val = p[x][y], i = y + 1 ; i < m && !v[x][i]; i++) { // 가로 확장
			val = val * 10 + p[x][i];
			v[x][i] = 1;
			f(nx, ny, s + val);
		}
		while (i-- && i >= y + 1) v[x][i] = 0;
		v[x][y] = 0;
	}
}
int main() {
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++) scanf("%1d", &p[i][j]);
	f(0, 0, 0);
	printf("%d", ans);
}

 

 

1등 이미지

엄청 오랜만에 1등을 해봤네요 !

 

반응형

'Algorithm' 카테고리의 다른 글

백준 1806 : 부분합  (0) 2021.11.12
백준 2003 : 수들의 합 2  (0) 2021.11.12
백준 1248 : 맞춰봐  (0) 2021.11.12
백준 2529 : 부등호  (0) 2021.11.12
백준 12100 : 2048 (Easy)  (0) 2021.11.12

+ Recent posts