์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
1์ด | 256 MB | 59.766% |
https://www.acmicpc.net/problem/11052
๋ฌธ์
๊ตฌ๋งคํ๊ณ ์ถ์ ์นด๋์ ๊ฐ์ N ๊ณผ, 1 ~ N ๊ฐ์ ์นด๋ ๋ฌถ์์ ๊ฐ๊ฒฉ P[1] ~ P[n]์ด ๋ ์ค์ ๋ํ๋๊ฒ ๋๋ค. ๋ฐ๋ผ์ P[1]์ ์นด๋ ํ ๊ฐ๋ฅผ ๊ตฌ๋งคํ์ ๋์ ๊ฐ๊ฒฉ, P[2]๋ ์นด๋ ๋ ๊ฐ๋ฅผ ๊ตฌ๋งคํ์ ๋์ ๊ฐ๊ฒฉ, P[3]์ ์นด๋ ์ธ ๊ฐ๋ฅผ ๊ตฌ๋งคํ์ ๋์ ๊ฐ๊ฒฉ์ด ๋๋ค.
์ด ๋ ์นด๋ N ๊ฐ๋ฅผ ๊ฐ๊ธฐ ์ํด ์ง๋ถํด์ผํ๋ ๊ธ์ก์ ์ต๋๊ฐ์ ์ถ๋ ฅํด์ผํ๋ค.
ํด๊ฒฐ๋ฐฉ์
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง P[i] ๋ฅผ ๊ธฐ์ค์ผ๋ก
- i ๊ฐ์ ์นด๋๋ฅผ ๊ตฌ๋งคํ๋ค๊ณ ๊ฐ์ ํ๋ค.
- j ๋ i ๋ณด๋ค ์์ ์ | 0 < j < i
- j ๋ก i ๋ฅผ ๋ง๋ค์ ์๋ ์กฐํฉ์ ์๊ฐํ๋ค.
- ์ฃผ์ด์ง P[i] ์ ์กฐํฉ๋ค์ ๊ฐ๊ฒฉ์ ๋น๊ตํ์ฌ ์ต๋๊ฐ์ dp[i] ์ ์ ์ฅํ๋ค.
์กฐํฉ์ j๋ก i ๋ฅผ๋ง๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ปํ๋ค.
์กฐํฉ๋ค์ ๊ฐ๊ฒฉ์ ์กฐํฉ๋ค ์ค ๊ฐ๊ฒฉ์ ํฉ์ด ์ต๋์ธ ๊ฒ์ด๋ค.
1 ๋ถํฐ i ๊น์ง ์ฐจ๋ก๋๋ก ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก dp[i] ๋ฅผ ์ฑ์ด๋ค๋ฉด,
dp[i]๋ i ๊ฐ์ ์นด๋๋ฅผ ๊ฐ๊ธฐ ์ํด ์ง๋ถํด์ผํ๋ ๊ธ์ก์ ์ต๋๊ฐ์ด ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก j ์ dp[j]์ ํด๋นํ๋ ์กฐํฉ๊ณผ ์กฐํฉ๋ค์ ๊ฐ๊ฒฉ๋ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค.
๋ ๊ฐ์ j ์ ์กฐํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ ์ต๋๊ฐ = dp[j] + dp[i-j]
์ด๋ ๊ฒ ์นด๋ ๊ฐ์์ ๋ํ ๊ธ์ก์ ์ต๋๊ฐ์ ์ ์ฅํจ์ผ๋ก์จ ๊ณ ๋ คํ๋ ๋ฒ์๊ฐ ์ข์์ง๊ฒ ๋์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํ ์ ์๊ฒ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
1992 KB | 0 ms |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int n, arr[1005], dp[1005];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &arr[i]);
}
dp[1] = arr[1];
for (int i = 2; i <= n; i++) {
int Max = arr[i];
for (int j = 1; j < i; j++) {
Max = max(Max, dp[j] + dp[i - j]);
}
dp[i] = Max;
}
printf("%d", dp[n]);
return 0;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #2941 ํฌ๋ก์ํฐ์ ์ํ๋ฒณ (0) | 2020.04.16 |
---|---|
[BOJ] #1021 ํ์ ํ๋ ํ (0) | 2020.01.11 |
[BOJ] #11722 ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ์์ด (0) | 2019.12.16 |
[BOJ] #11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด (0) | 2019.12.16 |
[BOJ] #9205 ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ (0) | 2019.10.15 |
๋๊ธ