스크리블
면접 대비시간 제한1초메모리 제한128 MB
점수와 개수가 정해진 일곱 개의 타일과 최대 100000개 단어 사전이 주어질 때, 타일로 만들 수 있는 단어 중 점수가 가장 높은 것을 찾고 없으면 0을 출력한다.
문제
그는 유가(yuga)의 중반에 이르러 캘러사이(calathi)에 플롱(flong)을 넣었으나, 그것은 무산되었다.
응?
믿기 어렵겠지만 위 문장은 문법적으로 완전히 올바른 영어 문장이다. 이 문장에는 두 가지 특징이 더 있다. 스팸처럼 보인다는 것, 그리고 단어 하나하나의 점수가 매우 높다는 것이다.
점수가 높다고? (무슨 이유에서인지 오늘따라 자꾸 혼잣말을 하고 있다.)
그렇다 — 스크리블(Scribble) 게임을 한다면 이 단어들은 아주 값지다. 표준 스크리블에서 calathi("그리스 회화와 조각에 등장하는 꽃병 모양의 바구니")는 점, nixed("거절당한")는 점, flong("스테레오타이프 판의 주형이 되는, 압축된 종이 뭉치")은 점, yuga("힌두 전통에서 세계의 존속 기간을 나누는 네 시대 — 크리타(사티아), 트레타, 드와파라, 칼리 — 중 하나")는 점이다.
알다시피 스크리블에서 각 글자에는 정해진 점수가 있으며, 주어진 글자들로 가능한 한 높은 점수를 얻는 것이 목표다.
이 문제에서는 규칙을 조금 바꾼다. 당신에게는 개의 타일(글자)이 있고, 각 글자 에는 점수 가 있으며 을 만족한다. 또한 (일반적인 스크리블과 달리) 게임을 하기 전에 유효한 단어들의 사전을 참고할 수 있다. 당신의 임무는 만들 수 있는 가장 높은 점수의 단어를 찾는 것이다. 한 단어의 점수는 그 단어를 이루는 글자들의 점수 합이다.
입력
첫 번째 줄에 정수 ()가 주어진다. 이어지는 개의 줄에는 각각 세 값 가 주어진다. 여기서 는 글자, 는 그 글자의 점수, 는 그 글자가 적힌 타일의 개수이다. 임이 보장된다. 예를 들어 세 값 a 7 2는 각각 점짜리 a 타일이 두 개 있다는 뜻이다. 그다음 줄(즉 번째 줄)에는 정수 ()이 주어진다. 이어지는 개의 줄에는 각각 단어가 하나씩 주어지며, 각 단어의 길이는 최소 이다.
출력
한 줄에 정수 하나를 출력한다. 이는 최대 점수, 즉 가진 타일로 사전에 있는 완전한 단어 하나를 만들어 얻을 수 있는 최대 점수이다. 어떤 단어도 만들 수 없다면 을 출력한다.