K512컵 개최!

시간 제한1초메모리 제한512 MB

요약
0에서 시작해 덧셈 카드 N장과 곱셈 카드 M장을 모두 사용해 최종 행운 수치를 최대로 만드는 순서를 찾는다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

2024년도부터 Sogang ICPC Team에서는 학회원들의 대회 경험을 쌓고 학회원들끼리의 친목 증진을 위해 매년 K512컵을 개최한다!

대회에서 중요한 요소 중 하나는 행운이다. 참가자들의 초기 행운 수치는 모두 00이며, 근수는 참가자들의 행운 수치를 변화시킬 수 있는 두 종류의 주문서를 참가자들에게 각각 NN, MM장씩 나눠준다. 참가자들은 주어진 주문서를 적절한 순서로 전부 소모하여 자신의 행운 수치를 변화시켜야 한다.

  1. NN장의 주문서에는 각각 수 a_ia\_i (1≤i≤N1 \le i \le N)가 적혀 있으며, 각각의 주문서를 소모할 때 행운 수치는 현재 행운 수치에서 a_ia\_i만큼 더해진 값이 된다.
  2. MM장의 주문서에는 각각 수 b_ib\_i (1≤i≤M1 \le i \le M)가 적혀 있으며, 각각의 주문서를 소모할 때 행운 수치는 현재 행운 수치에서 b_ib\_i만큼 곱해진 값이 된다.

즉 현재 행운 수치를 PP라고 할 때, 행운 수치는 각각 P+a_iP + a\_i, P×b_iP \times b\_i로 변화한다.

참가자들은 자신의 행운 수치를 최대화하여 모두 K512컵에서 좋은 결과가 있기를 바라고 있다. 당신도 입력으로 주어진 주문서를 적절한 순서로 모두 소모하여 행운 수치를 최대화해 보자!

입력

첫 번째 줄에 각 종류의 주문서들의 개수인 NN과 MM이 공백으로 구분되어 주어진다. (1≤N,M≤121 \le N, M \le 12)

두 번째 줄에는 NN개의 정수 a_1,...,a_Na\_1, ..., a\_N이 공백으로 구분되어 주어진다. (0≤a_i≤100 \le a\_i \le 10)

세 번째 줄에는 MM개의 정수 b_1,...,b_Mb\_1, ..., b\_M이 공백으로 구분되어 주어진다. (0≤b_i≤100 \le b\_i \le 10)

출력

주어진 주문서로 만들 수 있는 행운 수치의 최댓값을 출력한다.

힌트

큰 수를 다룰 때는 정수 오버플로우 현상에 주의해야 하며, 언어별로 다음과 같은 64비트 정수 자료형을 사용하는 것이 권장된다.

  • C, C++: long long (scanf/printf의 형식지정자로는 %lld 사용)
  • Java, Kotlin: long

예제3

  1. 예제 1

    입력
    2 2
    1 3
    2 5
    
    예상 출력
    40
    
  2. 예제 2

    입력
    3 4
    5 1 2
    2 0 2 4
    
    예상 출력
    128
    
  3. 예제 3

    입력
    1 10
    1
    10 10 10 10 10 10 10 10 10 10
    
    예상 출력
    10000000000