์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- LIS
- ๊ทธ๋ํ
- ์ ๋ ฌ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฐ์ ์์ํ
- DP
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ตฌํ
- ์ํ
- ๋์ ๊ณํ๋ฒ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ทธ๋ํํ์
- ๋จธ์ง์ํธ
- ๋์ ํฉ
- ๋๋น์ฐ์ ํ์
- DFS
- SQL
- ๋ฐฑ์ค
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ์์๊ตฌํ๊ธฐ
- ํ์ด์ฌ
- ์์ํ์
- BFS
- db
- ๊น์ด์ฐ์ ํ์
- ์ค๋ธ์
- ๋ณํฉ์ ๋ ฌ
- ์๋ฃ๊ตฌ์กฐ
- ๊ทธ๋ฆฌ๋
๐๐ญ๐ฐ๐ธ ๐ฃ๐ถ๐ต ๐ด๐ต๐ฆ๐ข๐ฅ๐บ
[๋ฐฑ์ค] 11055๋ฒ: ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด - C++ ๋ณธ๋ฌธ
[๋ฐฑ์ค] 11055๋ฒ: ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด - C++
.23 2021. 7. 25. 01:40๋ฌธ์
์์ด A๊ฐ ์ฃผ์ด์ก์ ๋, ๊ทธ ์์ด์ ์ฆ๊ฐ ๋ถ๋ถ ์์ด ์ค์์ ํฉ์ด ๊ฐ์ฅ ํฐ ๊ฒ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ์์ด A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} ์ธ ๊ฒฝ์ฐ์ ํฉ์ด ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด์ A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} ์ด๊ณ , ํฉ์ 113์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฌ๊ธฐ N (1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์์ด A๋ฅผ ์ด๋ฃจ๊ณ ์๋ Ai๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Ai ≤ 1,000)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด A์ ํฉ์ด ๊ฐ์ฅ ํฐ ์ฆ๊ฐ ๋ถ๋ถ ์์ด์ ํฉ์ ์ถ๋ ฅํ๋ค.
DP๋ฅผ ์ด์ฉํ๋ ๋ฌธ์ ..์ด์ LIS ๋ฌธ์ ์ด๋ค.
11053๋ฒ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด ๋ฌธ์ ์ ๋์ผํ๊ฒ ์์ ๋ณด๋ค ์์ ์กด์ฌํ๋ ๋ฐฐ์ด ๊ฐ ์ค ์์ ๊ฐ๋ค์ ์ฒดํฌํด๋๊ฐ๋ ๋ฌธ์ ์ด๋ค. ์์ด์ ๋ด์ ๋ฐฐ์ด์ A, ์์ด์ ๋ถ๋ถํฉ์ ์ ์ฅํ ๋ฐฐ์ด์ D๋ผ๊ณ ํ์ ๋, A์ ์ฒซ๋ฒ์งธ ์์์ธ A[1] ๋ถํฐ ์ ๊ฒํด๋๊ฐ๋ค. i๋ฒ์งธ ์์์ธ A[i]๋ฅผ ๊ธฐ์ค์ผ๋ก A[1]๋ถํฐ A[i - 1]๊น์ง A[i]๋ณด๋ค ์์ ๊ฐ์ด ์๋์ง ํ์ธํ๊ณ , D๊ฐ์ ๋น๊ตํด๊ฐ๋ฉฐ D[i]์ ์ต๋ ํฉ ๊ฐ์ ๋์ ํ๋ค. ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. A ๋ฐฐ์ด ๋ด์์ A[i]๋ณด๋ค ์์ ๊ฐ์ ์ฐพ๋๋ค. (1 ≤ i ≤ N, 1 ≤ j < i)
2. A[i]๋ณด๋ค ์์ ๊ฐ์ธ ์์์ ์์น๋ฅผ j๋ผ๊ณ ํ ๋, j๊น์ง์ ์ฆ๊ฐ ์์ด์ ํฉ์ธ D[j]์ A[i]๋ฅผ ๋ํ D[j] + A[i], ์ฆ ์์์ D[i] ๊ฐ์ด ๊ธฐ์กด์ D[i]๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ D[i] = D[j] + A[i]
3. D[i]๊น์ง์ ๊ฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ(์ต๋ ํฉ)์ sum์ ์ ์ฅ.
์ฝ๋
#include <cstdio>
#define MAX 1001
int DP(int num);
int main(void) {
int n;
scanf("%d", &n);
printf("%d\n", DP(n));
return 0;
}
int DP(int num) {
int A[MAX] = { 0 };
int memo[MAX] = { 0 };
int sum = 0;
for(int i = 1; i <= num; i++) {
scanf("%d", &A[i]);
}
for(int i = 1; i <= num; i++) {
memo[i] = A[i];
for(int j = 1; j < i; j++) {
if(A[i] > A[j] && memo[i] < memo[j] + A[i]) {
memo[i] = memo[j] + A[i];
}
}
sum = (sum > memo[i] ? sum : memo[i]);
}
return sum;
}
'์ฝ๋ฉํ ์คํธ ์ค๋น > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9465๋ฒ: ์คํฐ์ปค - C++ (0) | 2021.07.27 |
---|---|
[๋ฐฑ์ค] 11722๋ฒ: ๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด - C++ (0) | 2021.07.26 |
[๋ฐฑ์ค] 11053๋ฒ: ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด - C++ (0) | 2021.07.24 |
[๋ฐฑ์ค] 2193๋ฒ: ์ด์น์ - C++ (0) | 2021.07.23 |
[๋ฐฑ์ค] 11057๋ฒ: ์ค๋ฅด๋ง ์ - C++ (0) | 2021.07.20 |