문제링크 : https://www.acmicpc.net/problem/11052
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int arr[1001];
int dp[1001];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=1; i<=N; i++)
{
cin >> arr[i];
}
for(int i=1; i<=N; i++)
{
for(int j=1; j<=i; j++)
{
dp[i] = max(dp[i], dp[i-j]+arr[j]); //점화식
}
}
cout << dp[N];
return 0;
}
DP문제이다.
카드 1장 : (1)
카드 2장 : (1 + 1) or (2)
카드 3장 : (1 + 2) or (2 + 1) or (3)
카드 4장 : (1 + 3) or (2 + 2) or (3 + 1) or (4)
위와 같이 각 카드에 대해 가능한 가짓수를 찾아서 해당 가짓수에 대한 최대값을 저장해준다.
'백준 > 실버' 카테고리의 다른 글
[백준 1935번] 후위 표기식2 (C++) (0) | 2023.09.24 |
---|---|
[백준 12847번] 꿀 아르바이트 (C++) (0) | 2023.09.22 |
[백준 10825번] 국영수 (C++) (0) | 2023.09.16 |
[백준 1946번] 신입 사원 (C++) (0) | 2023.09.15 |
[백준 1254번] 팰린드롬 만들기 (C++) (0) | 2023.09.05 |