์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 1912๋ฒˆ: ์—ฐ์†ํ•ฉ (Dynamic Programming, C++)

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

by koharin 2021. 2. 22. 14:18

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“ ๋ฌธ์ œํ’€์ด ๊ณผ์ •


  • ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ์„ ๋•Œ, i๋ฒˆ์งธ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์†๋˜๋Š” ์ˆ˜๋ฅผ i-1๋ฒˆ์งธ๋ฅผ ์ƒ๊ฐํ•ด์„œ ํ’€์–ด๋ดค๋‹ค.
  • DP[i]: i๋ฒˆ์งธ์—์„œ ์—ฐ์†๋œ ์ˆ˜์˜ ๊ฐ€์žฅ ํฐ ํ•ฉ
  • i-1๋ฒˆ์งธ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ๋Š”, i๋ฒˆ์งธ ์ˆ˜(A[i])์™€ ํ•ฉํ–ˆ์„ ๋•Œ A[i]๋ณด๋‹ค ์ปค์ง€๋Š” ๊ฒฝ์šฐ์ด๋‹ค. A[i] ๊ธฐ์ค€ DP[i-1]์„ ๋”ํ•ด์„œ ์ปค์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด DP[i] = A[i]๋กœ ๊ฐ€์ ธ๊ฐ„๋‹ค. 
  • ๋”ฐ๋ผ์„œ DP[i] = A[i]๋กœ ์ดˆ๊ธฐํ™”ํ–ˆ์„ ๋•Œ, ์ ํ™”์‹ DP[i] = max(DP[i], DP[i-1] + A[i]) ๊ฐ€ ๋œ๋‹ค.
  • ๋งˆ์ง€๋ง‰์— ์ •๋‹ต์€ max_element()๋ฅผ ์ด์šฉํ•ด์„œ DP ์ „์ฒด ๋ฒ”์œ„์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค.

 

 

๐Ÿ’ป C++ ์ œ์ถœ์ฝ”๋“œ


#include <stdio.h>
#include <algorithm>
using namespace std;

int main(){
    int n;
    scanf("%d", &n);
    int A[n] = {}; int DP[n] = {};

    for(int i=0; i<n; i++){
        int num; scanf("%d", &A[i]);
    }

    DP[0] = A[0];
    for(int i=1; i<n; i++){
        DP[i] = A[i];
        DP[i] = max(DP[i], DP[i-1]+A[i]);
    }
    
    printf("%d", *max_element(DP, DP+n));
}

 

 

๐Ÿ‘ ๊ฒฐ๊ณผ


728x90
๋ฐ˜์‘ํ˜•