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

+ Recent posts