[BOJ][C++] λ°±μ€ 2579λ²: κ³λ¨ μ€λ₯΄κΈ°
https://www.acmicpc.net/problem/2579
2579λ²: κ³λ¨ μ€λ₯΄κΈ°
κ³λ¨ μ€λ₯΄κΈ° κ²μμ κ³λ¨ μλ μμμ λΆν° κ³λ¨ κΌλκΈ°μ μμΉν λμ°©μ κΉμ§ κ°λ κ²μμ΄λ€. <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ κ°κ°μ κ³λ¨μλ μΌμ ν μ μκ° μ°μ¬ μλλ° κ³λ¨μ λ°μΌλ©΄ κ·Έ κ³λ¨μ μ°μ¬ μλ μ
www.acmicpc.net
λ¬Έμ
κ³λ¨ μ€λ₯΄κΈ° κ²μμ κ³λ¨ μλ μμμ λΆν° κ³λ¨ κΌλκΈ°μ μμΉν λμ°©μ κΉμ§ κ°λ κ²μμ΄λ€. <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ κ°κ°μ κ³λ¨μλ μΌμ ν μ μκ° μ°μ¬ μλλ° κ³λ¨μ λ°μΌλ©΄ κ·Έ κ³λ¨μ μ°μ¬ μλ μ μλ₯Ό μ»κ² λλ€.

<κ·Έλ¦Ό 1>
μλ₯Ό λ€μ΄ <κ·Έλ¦Ό 2>μ κ°μ΄ μμμ μμλΆν° 첫 λ²μ§Έ, λ λ²μ§Έ, λ€ λ²μ§Έ, μ¬μ― λ²μ§Έ κ³λ¨μ λ°μ λμ°©μ μ λλ¬νλ©΄ μ΄ μ μλ 10 + 20 + 25 + 20 = 75μ μ΄ λλ€.

<κ·Έλ¦Ό 2>
κ³λ¨ μ€λ₯΄λ λ°λ λ€μκ³Ό κ°μ κ·μΉμ΄ μλ€.
- κ³λ¨μ ν λ²μ ν κ³λ¨μ© λλ λ κ³λ¨μ© μ€λ₯Ό μ μλ€. μ¦, ν κ³λ¨μ λ°μΌλ©΄μ μ΄μ΄μ λ€μ κ³λ¨μ΄λ, λ€μ λ€μ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€.
- μ°μλ μΈ κ°μ κ³λ¨μ λͺ¨λ λ°μμλ μ λλ€. λ¨, μμμ μ κ³λ¨μ ν¬ν¨λμ§ μλλ€.
- λ§μ§λ§ λμ°© κ³λ¨μ λ°λμ λ°μμΌ νλ€.
λ°λΌμ 첫 λ²μ§Έ κ³λ¨μ λ°κ³ μ΄μ΄ λ λ²μ§Έ κ³λ¨μ΄λ, μΈ λ²μ§Έ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€. νμ§λ§, 첫 λ²μ§Έ κ³λ¨μ λ°κ³ μ΄μ΄ λ€ λ²μ§Έ κ³λ¨μΌλ‘ μ¬λΌκ°κ±°λ, 첫 λ²μ§Έ, λ λ²μ§Έ, μΈ λ²μ§Έ κ³λ¨μ μ°μν΄μ λͺ¨λ λ°μ μλ μλ€.
κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§ λ μ΄ κ²μμμ μ»μ μ μλ μ΄ μ μμ μ΅λκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ λ ₯μ 첫째 μ€μ κ³λ¨μ κ°μκ° μ£Όμ΄μ§λ€.
λμ§Έ μ€λΆν° ν μ€μ νλμ© μ μΌ μλμ λμΈ κ³λ¨λΆν° μμλλ‘ κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§λ€. κ³λ¨μ κ°μλ 300μ΄νμ μμ°μμ΄κ³ , κ³λ¨μ μ°μ¬ μλ μ μλ 10,000μ΄νμ μμ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ κ³λ¨ μ€λ₯΄κΈ° κ²μμμ μ»μ μ μλ μ΄ μ μμ μ΅λκ°μ μΆλ ₯νλ€.
νμ΄
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int maxScore(int n, vector<int> &score) {
vector<int> dp(n+1, 0);
dp[1] = score[1];
dp[2] = score[1] + score[2];
for(int i=3; i<=n; i++)
// λμΉΈ μ μμ μ¨ κ²½μ° vs 3μΉΈμ +1μΉΈμ μ κ±°μ³ μ¨ κ²½μ°
dp[i] = max(dp[i-2], dp[i-3] + score[i-1]) + score[i];
return dp[n];
}
int main() {
int n;
cin >> n;
vector<int> score (n+1, 0);
for(int i=1; i<=n; i++)
cin >> score[i];
cout << maxScore(n, score);
return 0;
}
/*
*/
25.04.24 μΆκ°
one[i] = νλ¨κ³ μ¬λΌμμ iλ¨κ³κ° λ μ΅λ μ μ
two[i] = λλ¨κ³ μ¬λΌμμ iλ¨κ³κ° λλ μ΅λ μ μ
// νμ΄ : https://whkakrkr.tistory.com
#include <bits/stdc++.h>
using namespace std;
const int INF = 1000001;
int main() {
ios_base::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
// input
int n;
cin >> n;
vector<int>v(n);
for(int i=0; i<n; i++) {
cin >> v[i];
}
// solution
vector<int>one(n,0);
vector<int>two(n,0);
one[0] = two[0] = v[0];
one[1] = v[0] + v[1];
two[1] = v[1];
for(int i=2; i<n; i++) {
one[i] = two[i-1] + v[i];
two[i] = max(one[i-2], two[i-2]) + v[i];
}
// output
int ans = max(one[n-1], two[n-1]);
cout << ans;
return 0;
}