부 뎅클렉은 메기 양어장을 가지고 있다. 양어장은 N×N 격자칸 모양이다. 격자의 칸들은 같은 크기의 정사각형이다. 격자의 열들은 서쪽에서 동쪽으로 0부터 N−1까지 번호가 붙어 있고, 행들은 남쪽에서 북쪽으로 0부터 N−1까지 번호가 붙어있다. 열 c, 행 r에 (0≤c≤N−1, 0≤r≤N−1) 있는 칸을 칸 (c,r)로 부른다.
양어장에는 M 마리의 메기가 있다. 메기들은 0부터 M−1까지 번호가 붙어 있고, 모두 다른 칸에 있다. 각각의 i에 대해 (0≤i≤M−1) 메기 i는 칸 (X\[i],Y\[i])에 있고, 그 무게는 W\[i]그램이다.
부 뎅클렉은 메기를 잡기 위해 낚시터를 지으려고 한다. 열 c에 있는 길이 k인 낚시터는 (0≤c≤N−1, 1≤k≤N), 열 c의 행 0부터 행k−1까지를 덮는 직사각형이다. 즉, 낚시터는 칸들 (c,0),(c,1),…,(c,k−1)를 덮는다. 각 열에 대해서 부 뎅클렉은 특정한 길이의 낚시터를 짓거나, 낚시터를 전혀 짓지 않는 것 중 선택을 할 수 있다.
메기 i를 (0≤i≤M−1) 잡기 위해서는 메기 i의 위치의 서쪽이나 동쪽에 인접한 칸을 낚시터가 덮어야 하며, 메기 i의 위치는 낚시터가 덮지 않아야 한다. 다시 말하면,
예를 들어, N=5인 양어장에 M=4마리의 메기가 있다고 하자.
부 뎅클렉이 낚시터를 지을 수 있는 방법 중 하나는 아래와 같다.
| 낚시터 짓기 전 | 낚시터 지은 후 |
|---|---|
![]() | ![]() |
칸에 표시된 자연수는 그 칸에 있는 메기의 무게이다. 색칠된 칸들이 낚시터에 덮인 곳이다. 이 경우 잡을 수 있는 메기는 메기 0(칸 (0,2)에 위치)과 메기 3(칸 (3,3)에 위치)이다. 메기 1(칸 (1,1)에 위치)는 그 칸이 낚시터에 덮여 있어 잡을 수 없다. 메기 2(칸 (4,4)에 위치)는 서쪽이나 동쪽에 인접한 칸이 낚시터로 덮인 것이 없어 잡을 수 없다.
부 뎅클렉은 잡을 수 있는 메기의 무게의 합이 가장 크도록 낚시터를 짓고 싶다. 잡을 수 있는 메기의 최대 무게 합을 계산하는 프로그램을 작성하라.