https://www.acmicpc.net/problem/11055
풀이
이중 포문을 이용해서
if(arr[i]> arr[j]) dp[i] = max(dp[i], dp[j] + arr[i]);
if(dp[i] == 0 ) dp[i] = arr[i]; 하고
max 값을 지속적으로 비교해서 저장해 주면 끝이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define max(a,b) a>b ? a:b int main() { int N; int arr[1001] = { 0 }; int dp[1001] = { 0 }; int cnt; scanf("%d", &N); for (int i = 1; i <= N; i++) { scanf("%d", &arr[i]); } dp[1] = arr[1]; cnt = arr[1]; for (int i = 2; i <= N; i++) { for (int j = 1; j < i; j++) { if (arr[i] > arr[j]) dp[i] = max(dp[i], dp[j] + arr[i]); if (dp[i] == 0) dp[i] = arr[i]; } cnt = max(cnt, dp[i]); } printf("%d", cnt); return 0; } | cs |
'알고리즘' 카테고리의 다른 글
(9251)(DP) 백준 LCS (0) | 2018.08.10 |
---|---|
(2133)(DP) 백준 타일 채우기 (2) | 2018.08.06 |
(1699)(DP) 백준 제곱수의 합 (0) | 2018.08.04 |
(11048)(DP) 백준 이동하기 (0) | 2018.08.01 |
(2294)(DP) 백준 동전2 (0) | 2018.08.01 |