오답노트
[DP] BOJ 1932번 정수 삼각형 본문
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
- 문제 파악
정수 N이 주어지고 크기가 N인 삼각형이 주어진다 이 중에서 수를 선택할 수 있는데 선택한 수의 다음 줄의 왼쪽 또는 오른쪽만 선택할 수 있다. 이렇게 선택한 수들의 합의 최대값을 출력하라
- 정답
무식하게 요소에 접근 할때마다 이전까지 더했던 값의 합과 현재 요소를 더했을 때 큰 값을 남기도록 했다.
시간제한 2초 정도면 이중for문으로 무식하게 풀어도 되나보다.
#include "bits/stdc++.h"
using namespace std;
int n;
unsigned long long arr[502][502];
unsigned long long D[502][502];
unsigned long long ans;
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
cin>> arr[i][j];
}
}
D[1][0] = arr[1][1];
D[1][1] = arr[1][1];
int nPos = 1;
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= i; j++)
{
if(j - 1 == 0)
D[i][j] = max(D[i][j], D[i - 1][j] + arr[i][j]);
else
{
D[i][j] = max(D[i][j], D[i - 1][j] + arr[i][j]);
D[i][j] = max(D[i][j], D[i - 1][j-1] + arr[i][j]);
}
}
}
for (int i = 1; i <= n; i++)
{
ans = max(D[n][i], ans);
}
cout << ans;
}
'C,C++ > 코딩테스트' 카테고리의 다른 글
[DP] 11722번 가장 긴 감소하는 부분 수열 (0) | 2022.05.17 |
---|---|
[DP] BOJ 11055번 가장 큰 증가 부분 수열 - 오답노트 (0) | 2022.05.17 |
[DP] BOJ 2156 번 포도주 시식 - 오답노트 (0) | 2022.05.15 |
[DP] BOJ 11057번 오르막 수 (0) | 2022.05.15 |
[DP] BOJ 1309번 동물원 - 오답 노트 (0) | 2022.05.13 |