[λ°±μ€/C++] 13398λ² μ°μν© 2
π€λ¬Έμ μ΄ν΄
μ°μλ λͺ κ°μ μλ₯Ό μ ννμ λ κ·Έ ν©μ΄ κ°μ₯ ν° μμ΄μ ν©μ μΆλ ₯νλλ° κ·Έ μμ΄ μ€μμ νλλ₯Ό μμ¨ μ μλ λ¬Έμ μ΄λ€.
π‘첫λ²μ§Έ μμ΄λμ΄
νλλ₯Ό μ΄λ»κ² μμ¨κΉ νλ€κ° λ°λ‘ μ μ νΌ κ°μ₯ κΈ΄ λ°μ΄ν λ λΆλΆ μμ΄μ΄ λ μ¬λλ€.
μμμ μμλλ‘ ν©μ΄ κ°μ₯ ν° μ°μν©1μ ꡬν΄μ£Όκ³ , λ€μμ μμλλ‘ ν©μ΄ κ°μ₯ ν° μ°μν©2μ ꡬν΄μ£Όκ³ μ΄λ μ«μλ₯Ό κΈ°μ€μΌλ‘ μμμΌλ‘ μ°μν©1κ³Ό 2λ₯Ό λν κ°μ΄ κ°μ₯ ν¬λ€λ©΄ κ·Έ κΈ°μ€ μ«μλ₯Ό μμ€ κ²μ΄ λ ν°κ±°κ³ , μ°μν©1μ μ΅λκ°μ΄ κ°μ₯ ν¬λ€λ©΄ νλλ₯Ό μμ μ§ μμλ κ°μ₯ ν° μ°μν©μ ꡬν μ μλ κ²μ΄λΌκ³ μκ°ν΄μ νμλ€.
π₯νμ΄π₯
dp[i]λ iλ²μ§Έ μλ₯Ό λ§μ§λ§ μλ‘ νμ λ κ°μ₯ ν° μ°μν©μ μλ―Ένλ€.
dp2[i]λ iλ²μ§Έ μλ₯Ό 첫λ²μ§Έ μλ‘ νμ λ κ°μ₯ ν° μ°μν©μ μλ―Ένλ€.
1. dpμ dp2λ₯Ό λͺ¨λ μ λ ₯λ μμ΄λ‘ μ΄κΈ°ννκ³ , 0λ²μ§Έ dpλ₯Ό maxIntλ‘ μ΄κΈ°ννλ€.
2. iλ 1λΆν° n-1κΉμ§λ‘ dp[i]μ dp[i-1]+arr[i]κ³Ό λΉκ΅ν΄μ λ ν° κ°μ dp[i]μ λ£μ΄μ£Όκ³ , maxIntμ dp[i]λ₯Ό λΉκ΅ν΄ λ ν° κ°μ maxIntμ λ£μ΄μ€λ€.
3. iλ n-2λΆν° 0κΉμ§λ‘ dp2[i]μ dp2[i+1]+arr[i]κ³Ό λΉκ΅ν΄μ λ ν° κ°μ dp2[i]μ λ£μ΄μ£Όκ³ , maxIntμ dp2[i]λ₯Ό λΉκ΅ν΄ λ ν° κ°μ maxIntμ λ£μ΄μ€λ€.
4. dp2μ n-1λ²μ§Έ κ°κ³Ό dp2[0]λ²μ§Έ κ°μ maxIntμ λΉκ΅ν΄ λ ν° κ°μ maxIntμ λ£μ΄μ€λ€.
5. iλ 1λΆν° n-1κΉμ§λ‘ iλ²μ§Έ μ«μλ₯Ό μ μΈν dp[i-1]+dp2[i+1]μ κ°μ maxIntμ λΉκ΅ν΄ λ ν° κ°μ maxIntμ λ£μ΄μ€λ€.
5. maxIntκ° μΆλ ₯!
βνΈλ¬λΈ μν
maxIntλ₯Ό μ λ°μ΄νΈν΄μ£Όλ κ³Όμ μ΄ μΈμΈνκ² λ€μ΄κ°μΌ νλ€.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
long long dp[100001];
long long dp2[100001];
long long arr[100001];
int n;
long long maxInt;
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
dp[i] = arr[i];
dp2[i] = arr[i];
}
maxInt = dp[0];
for (int i = 1; i < n; i++) {
dp[i] = max(dp[i], dp[i - 1] + arr[i]);
maxInt = max(maxInt, dp[i]);
}
for (int i = n - 2; i >= 0; i--) {
dp2[i] = max(dp2[i], dp2[i + 1] + arr[i]);
maxInt = max(maxInt, dp2[i]);
}
maxInt = max(maxInt, dp2[n-1]);
maxInt = max(maxInt, dp2[0]);
for (int i = 1; i < n; i++) {
long long tmp = dp[i - 1] + dp2[i + 1];
if (tmp > maxInt) maxInt = tmp;
}
cout << maxInt;
}