아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

스크리블

면접 대비

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

요약
점수와 개수가 정해진 일곱 개의 타일과 최대 100000개 단어 사전이 주어질 때, 타일로 만들 수 있는 단어 중 점수가 가장 높은 것을 찾고 없으면 0을 출력한다.
난이도

보통10점 중 5점

유형
문자열, 해시맵, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

그는 유가(yuga)의 중반에 이르러 캘러사이(calathi)에 플롱(flong)을 넣었으나, 그것은 무산되었다.

응?

믿기 어렵겠지만 위 문장은 문법적으로 완전히 올바른 영어 문장이다. 이 문장에는 두 가지 특징이 더 있다. 스팸처럼 보인다는 것, 그리고 단어 하나하나의 점수가 매우 높다는 것이다.

점수가 높다고? (무슨 이유에서인지 오늘따라 자꾸 혼잣말을 하고 있다.)

그렇다 — 스크리블(Scribble) 게임을 한다면 이 단어들은 아주 값지다. 표준 스크리블에서 calathi("그리스 회화와 조각에 등장하는 꽃병 모양의 바구니")는 7272점, nixed("거절당한")는 2626점, flong("스테레오타이프 판의 주형이 되는, 압축된 종이 뭉치")은 1818점, yuga("힌두 전통에서 세계의 존속 기간을 나누는 네 시대 — 크리타(사티아), 트레타, 드와파라, 칼리 — 중 하나")는 3333점이다.

알다시피 스크리블에서 각 글자에는 정해진 점수가 있으며, 주어진 글자들로 가능한 한 높은 점수를 얻는 것이 목표다.

이 문제에서는 규칙을 조금 바꾼다. 당신에게는 77개의 타일(글자)이 있고, 각 글자 α\alpha에는 점수 sαs_\alpha가 있으며 0≤sα≤260 \le s_\alpha \le 26을 만족한다. 또한 (일반적인 스크리블과 달리) 게임을 하기 전에 유효한 단어들의 사전을 참고할 수 있다. 당신의 임무는 만들 수 있는 가장 높은 점수의 단어를 찾는 것이다. 한 단어의 점수는 그 단어를 이루는 글자들의 점수 합이다.

입력

첫 번째 줄에 정수 kk (1≤k≤71 \le k \le 7)가 주어진다. 이어지는 kk개의 줄에는 각각 세 값 α sα rα\alpha\ s_\alpha\ r_\alpha가 주어진다. 여기서 α\alpha는 글자, sαs_\alpha는 그 글자의 점수, rαr_\alpha는 그 글자가 적힌 타일의 개수이다. ∑αrα=7\sum_\alpha r_\alpha = 7임이 보장된다. 예를 들어 세 값 a 7 2는 각각 77점짜리 a 타일이 두 개 있다는 뜻이다. 그다음 줄(즉 k+2k+2번째 줄)에는 정수 NN (0≤N≤100 0000 \le N \le 100\,000)이 주어진다. 이어지는 NN개의 줄에는 각각 단어가 하나씩 주어지며, 각 단어의 길이는 최소 11이다.

출력

한 줄에 정수 하나를 출력한다. 이는 최대 점수, 즉 가진 타일로 사전에 있는 완전한 단어 하나를 만들어 얻을 수 있는 최대 점수이다. 어떤 단어도 만들 수 없다면 00을 출력한다.

예제1

  1. 예제 1

    입력
    4
    a 1 1
    b 4 1
    c 2 1
    d 10 4
    3
    ab
    bc
    c
    
    예상 출력
    6