๐ ๋ฌธ์ ํ์ด ๊ณผ์
- ๊ฐ๋จํ๊ฒ ์๊ฐํ์ ๋, 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));
}
๐ ๊ฒฐ๊ณผ