풍선 다트
면접 대비시간 제한1초메모리 제한512 MB
풍선의 점수와 터뜨리는 순서가 주어질 때, 풍선이 하나씩 터지는 동안 기록되는 점수의 최댓값을 구합니다.
문제
방구석에서 혼자 지내던 코더 병우를 안타깝게 여긴 친구들이 여자친구를 소개해 주었고, 둘은 놀이공원에 놀러 갔다.
벤치에서 이야기를 나누던 병우는 맞은편에 풍선 다트 게임이 있는 것을 보았다. 높은 점수를 얻어 곰 인형을 받고 싶었던 병우는 당당하게 게임장으로 걸어갔다. 그런데 놀이공원의 풍선 다트 게임은 병우가 알던 일반적인 풍선 다트와 전혀 다른 규칙을 따른다.
-
풍선은 1차원 배열처럼 한 줄로 나열되어 있다.
-
다트는 풍선의 개수만큼 주어진다. 병우는 다트의 신이라서 던지는 다트마다 풍선을 정확히 맞혀 터뜨린다.
-
점수는 각 세그먼트에 대해 (세그먼트에 포함된 풍선 점수의 합) \times (세그먼트의 크기)를 구한 뒤 모두 더한 값이다. 세그먼트는 연속한 부분 배열이다. 자세히 말하면, 구간 의 풍선이 모두 남아 있고 번째 풍선과 번째 풍선이 존재하지 않거나 터져 있을 때, 전체 배열 에서 이 하나의 세그먼트가 된다. 점수는 아래 식으로 계산한다.
- 는 번째 세그먼트에 포함된 풍선 점수의 합이다.
- 는 번째 세그먼트가 나타내는 구간의 크기이다.
- 는 세그먼트의 총 개수이다.
- 점수는 0점에서 시작하며, 다트로 풍선이 터질 때마다 다시 계산된다. 계산된 점수 중 최댓값이 최종 점수가 된다. 첫 다트를 던지기 전에는 점수가 계산되지 않으므로 점수는 0점이다.
입력
첫 번째 줄에 풍선의 개수 ()이 주어진다.
두 번째 줄에는 각 풍선의 점수 ()이 개의 정수로 주어진다.
세 번째 줄에는 풍선을 터뜨리는 순서 ()이 서로 다른 개의 정수로 주어진다.
출력
최종 점수를 출력한다.