프렌즈 통화 요금제

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

요약
최대 16명의 직원을 짝지어 통화 요금 총합을 최소화하는 완벽 매칭을 비트마스크 DP로 구하는 문제입니다.
난이도

보통10점 중 5점

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

문제

클라크(Clarke)는 작은 회사를 운영한다. 업무 특성상 모든 직원은 서로 통화할 수 있도록 휴대전화를 지급받았고, 직원들의 통화 요금은 모두 클라크가 부담한다. 그는 이 요금을 최대한 줄이고 싶다.

통신사는 '프렌즈(friends)' 서비스를 제공한다. 자주 통화하는 두 사람은 '프렌즈' 쌍을 맺을 수 있으며, 이 경우 두 사람 사이의 통화 요금이 더 저렴해진다. 단, 한 사람은 최대 하나의 프렌즈 쌍에만 속할 수 있고, 프렌즈가 아닌 다른 사람과의 통화 요금은 그대로 유지된다.

1분 통화 요금은 프렌즈 쌍이면 FF, 그렇지 않으면 RR이다. 즉, 두 직원 사이의 MM분짜리 통화 하나는 두 사람이 프렌즈 쌍이면 F×MF \times M, 아니면 R×MR \times M의 비용이 든다. 전체 통화 요금은 모든 통화 비용의 합이다.

지난달 직원들의 통화 목록(누가 누구와 몇 분 통화했는지)이 주어질 때, 모든 직원을 N/2N/2개의 프렌즈 쌍으로 짝지어 회사 전체 통화 요금을 최소로 만들고자 한다. 가능한 최소 총 통화 요금을 구하여라.

입력

첫째 줄에 두 정수 FF와 RR이 공백으로 구분되어 주어진다 (1≤F≤R≤1001 \le F \le R \le 100). FF는 프렌즈 쌍의 1분 통화 요금, RR은 프렌즈가 아닌 경우의 1분 통화 요금이다.

둘째 줄에 직원 수를 나타내는 짝수 NN이 주어진다 (2≤N≤162 \le N \le 16). 직원은 11번부터 NN번까지 번호가 매겨져 있다.

셋째 줄에 통화 횟수 CC가 주어진다 (1≤C≤100001 \le C \le 10000).

이어지는 CC개의 줄에는 각각 세 정수 AA, BB, MM이 공백으로 구분되어 주어진다 (1≤A≤N1 \le A \le N, 1≤B≤N1 \le B \le N, 1≤M≤1001 \le M \le 100). 이는 직원 AA와 BB가 MM분 동안 통화했음을 뜻한다.

출력

가능한 최소 총 통화 요금을 한 줄에 출력한다. 이는 모든 직원을 N/2N/2개의 프렌즈 쌍으로 가장 알맞게 짝지었을 때 얻을 수 있는 전체 요금의 최솟값이다.

예제3

  1. 예제 1

    입력
    1 2
    4
    4
    2 3 18
    2 4 26
    2 3 2
    1 4 12
    
    예상 출력
    84
    
  2. 예제 2

    입력
    1 2
    8
    5
    5 3 14
    5 6 66
    7 8 72
    5 7 99
    6 1 17
    
    예상 출력
    398
    
  3. 예제 3

    입력
    3 10
    6
    4
    1 3 50
    3 5 85
    4 1 87
    2 3 73
    
    예상 출력
    1746