본문 바로가기

BOJ/C++

연속합

*숫자 한개 이상은 반드시 선택해야 한다. 

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
32
33
34
35
36
#include <iostream>
#include <vector>
#define MAXX 100001
using namespace std;
 
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    int n;
    int nums[MAXX] = {0};
    int total = -987654321;
    cin >> n;
    int min = 987654321;
    for (int i = 1; i <= n; i++)
    {
        cin >> nums[i];
    }
 
    int dp[MAXX][2= {{0}};
    //자신이 선택되었을 때와 아닐 때를 구분해서 최대값을 저장한다.
    //0은 선택X, 1은 선택
    //한개는 반드시 선택되어야 한다.
 
    dp[0][0= -987654321;
    for (int i = 1; i <= n; i++)
    {
        dp[i][0= max(dp[i - 1][0+ nums[i], nums[i]);
        dp[i][1= max(dp[i - 1][1+ nums[i], dp[i - 1][0]); //자신이 선택됐을 때
        total = max(total, max(dp[i][0], dp[i][1]));
    }
    cout << total << '\n';
 
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

검증 TC

1

-1

 

'BOJ > C++' 카테고리의 다른 글

빵집  (0) 2020.02.21
수2  (0) 2020.02.21
물통  (0) 2020.02.21
터보소트  (0) 2020.02.20
공장  (0) 2020.02.20