본문 바로가기

code/2019 하계 알고리즘 캠프

1-B-C 백준 16937번 두 스티커

알고리즘 캠프에서 풀었던 다른 문제들:

 

알고리즘 캠프 인덱스

5일동안 풀었던 여러 유형의 백준 문제들 1일차 Brute Force 2일차 BFS 3일차 4일차 5일차 오전(A) A. 15650번 N과 M(2) B. 14501번 퇴사(+ 퇴사 2) 오후(B) A. 16922 로마숫자 만들기 B. 16917번 두 동전 C. 1693..

dongwook-chang.tistory.com

문제 링크:

 

16937번: 두 스티커

첫째 줄에 모눈종이의 크기 H, W, 둘째 줄에 스티커의 수 N이 주어진다. 다음 N개의 줄에는 스티커의 크기 Ri, Ci가 주어진다.

www.acmicpc.net

 

#include <iostream>
#include <algorithm>

using namespace std;

int A, B, N;
int ab[100][2];
#define IN(p) ((p).first <= A && (p).second <= B)
int marea;

pair<int, int> new_ab(int c, int d) {
	if (c > d)	{ return make_pair(c, d); }
	else		{ return make_pair(d, c); }
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> A >> B >> N;
	if (B > A) swap(A, B);
	for (int i = 0; i < N; ++i) {
		cin >> ab[i][0] >> ab[i][1];
	}

	int i, j;
	for (i = 0; i < N - 1; ++i) {
		for (j = i + 1; j < N; ++j) {
			for (auto k : { 0, 1 }) {
				for (auto l : { 0, 1 }) {
					if (IN(new_ab(ab[i][k] + ab[j][l], max(ab[i][1 - k], ab[j][1 - l])))) {
						int area = ab[i][0] * ab[i][1] + ab[j][0] * ab[j][1];
						if (area > marea)
							marea = area;
					}
				}
			}
		}
	}
	
	cout << marea;

	return 0;
}