728x90
문제 요약
수열 A에서 증가 부분 수열 중 합의 최댓값 찾기
접근
1. 규칙찾기
알고리즘
- 규칙찾기
새로 알게된 것
- dp 너무 어려운데..?
전체 코드
#include <iostream>
#include <algorithm> // max
#define MAX 1000
using namespace std;
int N, answer;
int arr[MAX];
int memo[MAX][MAX];
void printMemo(int size)
{
for (size_t i = 0; i < size; i++)
{
cout << arr[i] << "/\t";
for (size_t j = 0; j < size; j++)
{
cout << memo[i][j] << "\t";
}
cout << endl;
}
cout << endl;
}
int main()
{
// 1 init
cin >> N;
for (int i = 0; i < N; i++) cin >> arr[i];
// 2 dynamic programming with memoization
for (int i = 0; i < N; i++)
{
answer = max(answer, arr[i]);
for (int j = i; j < N; j++)
{
if (arr[i] < arr[j])
{
if (i > 0)
{
memo[i][j] = max(memo[i - 1][j], memo[i][i] + arr[j]);
}
else
{
memo[i][j] = arr[i] + arr[j];
}
}
else if (arr[i] == arr[j])
{
if (i>0)
{
memo[i][j] = max(arr[i], memo[i-1][j]);
}
else
{
memo[i][j] = arr[i];
}
}
else // arr[i] > arr[j]
{
if (i > 0)
{
memo[i][j] = memo[i-1][j];
}
else
{
memo[i][j] = arr[j];
}
}
answer = max(answer, memo[i][j]);
}
}
// 3 answer
cout << answer << endl;
return 0;
}
일차원 배열로 바꿀수 있지만 시간이 없어서 못 바꿨다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2252 줄세우기, C++ (1) | 2022.09.05 |
---|---|
[백준] 12865 평범한 배낭, C++ (5) | 2022.09.01 |
[백준] 2133 타일 채우기, C++ (0) | 2022.08.30 |
[백준] 2580 스도쿠, C++ (0) | 2022.08.21 |
[프로그래머스] 메뉴리뉴얼, C++ (0) | 2022.08.21 |