반응형

https://www.acmicpc.net/problem/2229

 

2229번: 조 짜기

알고스팟 캠프에 N(1 ≤ N ≤ 1,000)명의 학생들이 참여하였다. 학생들은 열심히 공부를 하고 있었는데, 어느 날 조별 수업을 진행하기로 하였다. 조별 수업의 목적은 잘 하는 학생들과 덜 잘 하는

www.acmicpc.net

 

 

[ 문제풀이 ]

 

1. dp [ i ] 에는 i번 학생까지의 조가 잘 짜여진 정도의 최댓값을 저장합니다.

 

2. 다음과 같은 점화식을 세웁니다.

dp [ i ] = max(dp [ i ], dp [ j - 1 ] + Max - Min)

 

3. 이때, Max와 Min은 j ~ i번 학생들의 점수 최댓값과 최솟값입니다.

 

[ 소스코드 ]

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
#include<iostream>
 
using namespace std;
 
int N;
int arr[1001];
int dp[1001];    //i번 학생까지 잘 짜여진 정도의 최댓값
 
int main()
{
    scanf("%d"&N);
 
    for (int i = 1; i <= N; i++) {
        scanf("%d"&arr[i]);
    }
 
    for (int i = 2; i <= N; i++) {
        int Max = arr[i];
        int Min = arr[i];
 
        for (int j = i - 1; j > 0; j--) {
            Max = max(Max, arr[j]);
            Min = min(Min, arr[j]);
 
            dp[i] = max(dp[i], dp[j - 1+ Max - Min);
            //j ~ i 까지의 최댓값과 최솟값의 차와 dp[j - 1]의 합
        }
    }
 
    printf("%d", dp[N]);
}
cs
반응형

+ Recent posts