- 문제 설명
5 |
2 |
8 |
8 |
8 |
4 |
4 |
8 |
5 |
8 |
10 |
9 |
6 |
3 |
5 |
위 번호판에서 오른쪽이나 아래로만 갈 수 있고 가면서 큰 수를 더했을때 최대값을 구하시오
- 입력
1 // 테스트 케이스
3 5 // 행, 렬
5 2 8 8 8 // 숫자 판
4 4 8 5 8
10 9 6 3 5
- 출력
#1 44 // 테스트 케이스, 최대합
- 입력 예시
3
3 5
5 2 8 8 8
4 4 8 5 8
10 9 6 3 5
4 5
10 3 3 2 2
9 9 10 10 2
8 8 4 1 1
1 4 5 6 3
20 20
11 18 3 11 19 1 8 8 19 17 4 3 18 9 9 14 14 9 17 3
11 6 8 10 17 10 10 5 11 18 15 8 15 4 9 1 12 18 15 5
5 14 4 16 16 11 13 18 12 16 6 15 10 20 18 12 10 13 10 9
20 1 4 9 5 14 8 1 4 13 11 9 12 18 2 1 20 13 9 19
16 8 9 12 1 19 6 8 16 20 1 5 15 5 17 19 5 2 20 14
16 3 1 16 15 5 8 2 16 20 5 8 6 1 8 3 8 13 12 18
15 14 15 9 4 12 18 10 20 6 17 12 3 14 17 17 15 19 16 2
19 14 5 6 3 15 16 19 1 16 12 16 1 2 11 3 2 11 6 9
9 4 10 20 5 12 10 16 3 4 15 18 2 20 20 20 2 10 9 5
14 2 5 16 16 18 11 2 9 11 2 17 8 11 5 6 11 16 18 7
3 8 20 13 19 7 15 3 20 19 15 12 11 14 1 14 11 13 1 16
5 10 19 1 18 15 20 9 8 17 19 19 15 12 13 16 13 9 18 19
15 12 13 5 18 4 6 19 19 15 6 10 3 2 18 10 6 3 20 6
20 17 2 6 8 14 16 6 4 12 13 15 1 14 12 20 9 15 9 15
19 16 1 11 10 17 10 7 20 17 8 8 19 19 7 16 17 8 6 20
12 11 15 20 2 14 1 20 15 9 14 17 7 7 12 20 14 13 18 1
4 8 10 20 14 19 2 9 6 8 11 14 10 13 10 13 8 10 2 1
5 1 4 5 19 19 9 4 19 5 9 4 19 12 16 9 16 13 10 20
16 8 11 3 2 20 4 3 9 8 11 5 6 11 5 17 8 1 14 12
10 20 8 19 16 14 3 8 18 9 17 9 18 6 6 11 10 3 14 9
- 출력 예시
#1 44
#2 58
#3 566
- 코드
#include "stdio.h"
int N,M; // 행, 렬
int numberPad[101][101];
int maxSum[101][101];
int main(int argc, const char * argv[]) {
int T;
scanf("%d", &T);
for(int tc = 1;tc <= T;tc++)
{
scanf("%d %d",&N,&M);
for(int i=0;i<=M;i++) // 맨 윗행 0으로 초기화
{
numberPad[0][i] = 0;
}
for(int i=0;i<=N;i++) // 맨 첫열 0으로 초기화
{
numberPad[i][0] = 0;
}
for(int i=1;i<=N;i++) // maxSum배열 초기화
{
for(int j=1;j<=M;j++)
{
scanf("%d",&numberPad[i][j]); // 숫자판 채우기
maxSum[i][j] = 0; // 나머지 maxSum 초기화
}
}
for (int i = 1; i<=N; i++)
{
for (int j=1; j<=M; j++)
{
int maxValue = (maxSum[i-1][j] > maxSum[i][j-1]) ? maxSum[i-1][j] : maxSum[i][j-1]; // 더 큰수를 찾아
maxSum[i][j] = maxValue+numberPad[i][j]; // 현재 값에 더 큰수를 더해준다.
}
}
printf("#%d %d\n", tc,maxSum[N][M]);
}
return 0;
}
'교육 > 문제해결' 카테고리의 다른 글
[10일차] [DP2] 소수의 합 (0) | 2017.09.08 |
---|---|
[9일차][DP] 최소합 구하기 (0) | 2017.09.07 |
[9일차][DP] 이항계수 구하기 (0) | 2017.09.07 |
[8일차][다익스트라] 최소 연료 소비량 (0) | 2017.09.06 |
[8일차][다익스트라] 최단거리 (0) | 2017.09.06 |