롤러코스터 타기

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

요약
롤러코스터마다 k번째 탑승의 재미가 a_i-(k-1)^2*b_i이고 탑승 시간이 정해져 있을 때, 각 방문 시간 예산 안에서 얻을 수 있는 최대 총 재미를 Q개의 질의에 답한다.
난이도

보통10점 중 7점

유형
동적 계획법, 그리디, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

상근이와 친구들이 놀이공원에 놀러 갔다. 이 놀이공원에는 여러 종류의 롤러코스터가 있고, 상근이는 각 롤러코스터를 미리 분석해 두었다. 상근이는 각 롤러코스터를 탔을 때 느끼는 재미를 숫자로 적어 두었다. 하지만 같은 롤러코스터를 여러 번 탈수록 느끼는 재미는 점점 줄어든다.

상근이는 ii번 롤러코스터를 kk번째로 탔을 때 느끼는 재미를 다음 함수로 정의했다.

f(i,k)=ai−(k−1)2⋅bif(i, k) = a_i - (k-1)^2 \cdot b_i

만약 f(i,k)f(i, k)가 양수가 아니라면, 그 롤러코스터를 더 타도 재미를 전혀 느끼지 못한다.

상근이는 재미의 합이 최대가 되도록 롤러코스터를 타려고 한다. 놀이공원에 머무를 수 있는 시간이 주어질 때, 롤러코스터를 타는 데 든 시간의 합이 그 시간을 넘지 않으면서 얻을 수 있는 재미의 최댓값을 구하면 된다. 각 롤러코스터를 한 번 타는 데에는 정해진 시간이 걸린다.

입력

첫째 줄에 롤러코스터의 개수 NN이 주어진다. (0<N≤1000 < N \le 100)

다음 NN개의 줄에는 각각 세 정수 aia_i, bib_i, tit_i가 주어진다. aia_i와 bib_i는 재미 함수의 계수이고, tit_i는 ii번 롤러코스터를 한 번 타는 데 걸리는 시간이다. (0≤ai,bi≤1,0000 \le a_i, b_i \le 1{,}000, 0<ti≤25,0000 < t_i \le 25{,}000)

그다음 줄에는 놀이공원을 방문하는 횟수 QQ가 주어진다. (0≤Q≤1,0000 \le Q \le 1{,}000)

다음 QQ개의 줄에는 상근이가 놀이공원에 머무를 수 있는 시간 TiT_i가 각각 주어진다. (0≤Ti≤25,0000 \le T_i \le 25{,}000)

출력

QQ개의 줄을 출력한다. 각 방문 시간 TiT_i에 대해, 롤러코스터를 타는 데 든 시간의 합이 TiT_i를 넘지 않도록 하면서 상근이가 얻을 수 있는 재미의 최댓값을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2
    5 0 5
    7 0 7
    4
    88
    5
    6
    7
    
    예상 출력
    88
    5
    5
    7
    
  2. 예제 2

    입력
    1
    100 3 2
    5
    2
    3
    4
    5
    100
    
    예상 출력
    100
    100
    197
    197
    435