Logo
(追記) (追記ここまで)

27508번 - 던전 서브태스크언어 제한함수 구현

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1.5 초 1024 MB188686037.975%

문제

철수와 영희는 게임을 하는 도중 던전을 통과하게 되었다. 던전은 가로 $N$칸, 세로 $N$칸인 격자 모양이다. 격자의 행들은 위에서부터 0ドル$부터 $N - 1$까지 번호가 붙어져 있으며, 격자의 열들은 왼쪽부터 0ドル$부터 $N - 1$까지 번호가 붙어져 있다. $i$번 행, $j$번 열에 위치한 칸을 칸 $(i, j)$라고 부른다.

던전을 통과하는 규칙은 아래와 같다.

  • 철수는 던전의 제일 왼쪽 위 칸에서 출발하여 제일 오른쪽 아래 칸으로 이동한다. 이동할 때, 철수는 현재 위치한 칸에서 오른쪽 혹은 아래로 바로 인접한 칸으로만 이동이 가능하다.
  • 영희는 던전의 제일 오른쪽 위 칸에서 출발하여 제일 왼쪽 아래 칸으로 이동한다. 이동할 때, 영희는 현재 위치한 칸에서 왼쪽 혹은 아래로 바로 인접한 칸으로만 이동이 가능하다.

던전의 각 칸에는 아이템이 하나씩 있다. 각 아이템의 가치는 양의 정수, 0ドル,ドル 혹은 음의 정수이며, 칸 $(i, j)$ 에 있는 아이템의 가치는 $V[i][j]$이다. 철수와 영희는 모든 칸에 있는 아이템의 가치를 이미 다 알고 있다. 던전을 통과하고 나면 철수와 영희가 지나간 모든 칸의 아이템들을 다 모으게 된다. 두 사람이 모두 지나간 칸에서도 아이템은 하나만 모으게 된다는 것에 주의하라.

철수와 영희가 모으는 아이템 가치 합의 가능한 최댓값을 구하는 프로그램을 작성하라.

함수 목록 및 정의

여러분은 아래 함수를 구현해야 한다.

int max_item_sum(vector<vector<int> > V)
  • $V$: 크기가 $N \times N$인 2ドル$차원 정수 배열. 모든 $i,ドル $j$ (0ドル ≤ i, j ≤ N - 1$)에 대해, $V[i][j]$는 던전의 칸 $(i, j)$에 있는 아이템의 가치이다.
  • 이 함수는 철수와 영희가 모을 수 있는 아이템 가치 합의 가능한 최댓값을 반환해야 한다.

제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.

입력

출력

제한

  • 2ドル ≤ N ≤ 1,000円$
  • 모든 $i,ドル $j$에 대해 $-100,000円 ≤ V[i][j] ≤ 100,000円$ (0ドル ≤ i, j ≤ N - 1$)

서브태스크

번호배점제한
111

$N ≤ 5$

244

$N ≤ 300$

315

모든 $i,ドル $j$에 대해 $V[i][j] ≥ 0$ (0ドル ≤ i, j ≤ N - 1$)

430

추가적인 제약 조건이 없다.

힌트

예제 1

$N = 5,ドル $V = [[−1, −1, −1, −1, −1], [−1, −1, 1, −1, −1], [−1, −1, −1, −1, −1], [−1, −1, 1, −1, −1], [−1, −1, −1, −1, −1]]$인 경우를 생각해 보자.

그레이더는 다음과 같이 함수를 호출한다.

max_item_sum([[-1, -1, -1, -1, -1], [-1, -1, 1, -1, -1], [-1, -1, -1, -1, -1], [-1, -1, 1, -1, -1], [-1, -1, -1, -1, -1]])

아래 그림은 이 경우의 던전을 표현한 것이다. 각 칸에 기록된 값은 그 칸의 아이템의 가치이다.

아래 그림의 왼쪽의 파란 색 칸들은 철수가 지나간 칸 들, 오른쪽의 노란 색 칸들은 영희가 지나간 칸들을 표시한다. 철수만 지나간 칸들에서 아이템들의 가치 합은 $-4,ドル 영희만 지나간 칸들에서 아이템들의 가치 합도 $-4$이며, 두 명이 모두 지나간 칸들에서 아이템들이 가치 합은 $-1$이다. 따라서, 아이템들의 총 가치 합은 $-9$ 이며, 이 경우가 가치의 합이 최대인 경우이다.

함수는 $-9$를 반환해야 한다.

예제 2

$N = 5,ドル $V = [[1, 2, 3, 4, 5], [2, 3, 4, 5, 1], [3, 4, 5, 1, 2], [4, 5, 1, 2, 3], [5, 1, 2, 3, 4]]$인 경우를 생각해 보자. 그레이더는 다음과 같이 함수를 호출한다.

max_item_sum([[1, 2, 3, 4, 5], [2, 3, 4, 5, 1], [3, 4, 5, 1, 2], [4, 5, 1, 2, 3], [5, 1, 2, 3, 4]])

함수는 60ドル$을 반환해야 한다.

예제 3

$N = 5,ドル $V = [[1, 1, −1, −1, 1], [−1, 1, −1, 1, 1], [1, 1, 1, 1, −1], [1, −1, −1, 1, −1], [1, −1, −1, 1, 1]]$인 경우를 생각해 보자.

그레이더는 다음과 같이 함수를 호출한다.

max_item_sum([[1, 1, -1, -1, 1], [-1, 1, -1, 1, 1], [1, 1, 1, 1, -1], [1, -1, -1, 1, -1], [1, -1, -1, 1, 1]])

함수는 15ドル$를 반환해야 한다.

샘플 그레이더

Sample grader는 아래와 같은 형식으로 입력을 받는다.

  • Line 1ドル$: $N$
  • Line 2ドル + i$ (0ドル ≤ i ≤ N - 1$): $V[i][0]$ $V[i][1]$ $\cdots$ $V[i][N - 1]$

Sample grader는 다음을 출력한다.

  • Line 1ドル$: 함수 max_item_sum가 반환한 값

Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.

출처

Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2023 > 1차 선발고사 1번

제출할 수 있는 언어

C++17, C++20, C++17 (Clang), C++20 (Clang)

채점 및 기타 정보

  • 예제는 채점하지 않는다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /