만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

K512컵 개최!

면접 대비

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

요약
0에서 시작해 덧셈 두루마리 N개와 곱셈 두루마리 M개를 모두 한 번씩 사용하여 얻을 수 있는 최대 운 값을 구합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 비트 연산
정답자
아직 제출이 없습니다

문제

2024년부터 Sogang ICPC Team은 학회원들이 대회 경험을 쌓고 서로 친목을 다질 수 있도록 매년 K512컵을 개최한다.

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

  1. NN장의 주문서에는 각각 수 aia_i (1≤i≤N1 \le i \le N)가 적혀 있다. 주문서를 소모하면 현재 행운 수치 PP에 aia_i가 더해져 P+aiP + a_i가 된다.
  2. MM장의 주문서에는 각각 수 bib_i (1≤i≤M1 \le i \le M)가 적혀 있다. 주문서를 소모하면 현재 행운 수치 PP에 bib_i가 곱해져 P×biP \times b_i가 된다.

주어진 주문서를 적절한 순서로 모두 소모해서 행운 수치를 최대화하라.

입력

첫 번째 줄에 공백으로 구분된 정수 NN과 MM이 주어진다 (1≤N,M≤121 \le N, M \le 12).

두 번째 줄에 공백으로 구분된 정수 NN개 a1,…,aNa_1, \ldots, a_N이 주어진다 (0≤ai≤100 \le a_i \le 10).

세 번째 줄에 공백으로 구분된 정수 MM개 b1,…,bMb_1, \ldots, b_M이 주어진다 (0≤bi≤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