NEXON에서는 올해 처음으로 빙고 대회를 개최하게 되었다.
제1회 NEXON 빙고 대회에는 일반적인 빙고 게임과는 달리 다음과 같은 간단한 규칙으로 진행한다.
- 빙고 용지는 크기의 격자이다.
- 참가자는 개의 칸을 마음대로 골라 동그라미를 친다.
- 동그라미를 친 칸들이 번째 행을 완성하면 점을 획득한다.
- 동그라미를 친 칸들이 번째 열을 완성하면 점을 획득한다.
- 마지막에 가장 높은 점수를 획득한 참가자가 우승한다.
대각선에 대해서는 고려하지 않는다는 것에 주의하라.
참가자가 획득할 수 있는 최고 점수는 몇 점인지 구하는 프로그램을 작성하시오.
입력 형식
첫 줄에 세 정수 , , 가 공백으로 구분되어 주어진다. (, )
두 번째 줄에 개의 정수, 이 공백으로 구분되어 주어진다. ()
세 번째 줄에 개의 정수, 이 공백으로 구분되어 주어진다. ()
출력 형식
첫 줄에 참가자가 획득할 수 있는 최고 점수를 나타내는 정수를 출력한다.
예제 1
입력
3 5 8 75 86 45 65 46 33 66 81
출력
167
예제 2
입력
3 5 8 66 37 28 53 42 90 35 75
출력
165
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 23점
종류 2: 21점
종류 3: 25점
종류 4: 31점
추가적인 제한 조건이 없음.
해설
인 경우부터 생각해 봅시다. 모든 칸을 칠할 수 있는 경우가 아니라면, 행에 대한 점수는 받을 수 없습니다. 열에 대한 점수는 탐욕적으로 점수가 높은 것부터 완성시키는 것이 최적이므로, 정렬하고 풀면 에 답을 구할 수 있습니다.
개의 행을 칠했다고 해 봅시다. 개의 행을 칠하는 데에 개의 칸을 색칠했고, 하나의 열을 추가로 색칠할 때 개의 칸만 더 칠하면 됩니다. 따라서 개의 열을 더 칠할 수 있습니다.
추가로 칠하는 열은 일 때의 경우와 마찬가지로 점수가 높은 것부터 완성시키는 것이 최적입니다. 행을 칠할 때에도 마찬가지로, 점수가 높은 개의 행을 칠하는 것이 최적입니다.
행과 열의 점수를 정렬해 놓고 누적합 배열을 만들어 두면, 각 에 대해 점수를 에 구할 수 있습니다. 이렇게 하면 시간복잡도 에 문제를 해결할 수 있습니다.