[DP] 13398. μ°μν© 2
by rlaehddnd0422
μ°μν© 2 λ¬Έμ λ μ°μν© 1 λ¬Έμ μμ μ«μλ₯Ό νλ λΊ κ²½μ°κΉμ§ μ‘°μ¬νλ€λ μ μμ μ°¨μ΄κ° μμ΅λλ€.
μλ₯Όλ€μ΄ μμ΄ Aκ° λ€μκ³Ό κ°μ λ,
10 -4 3 1 5 6 -35 12 21 -1
μ°μν© 1 λ¬Έμ μμλ μμ΄μμ λͺκ°μ μλ₯Ό μ νν΄μ λνμμ λ, κ°μ₯ ν° κ°μ λ¬Έμ λΌλ©΄
μ°μν© 2 λ¬Έμ μμλ μμ΄μμ λͺκ°μ μλ₯Ό μ ννλ νλμ μλ₯Ό μ κ±°ν μ μλ κ²½μ°κΉμ§ κ³μ°ν΄μΌ ν©λλ€.
νμλ κΈΈμ΄ Nμ μμ΄μ λνμ¬
D[0][N] = κΈΈμ΄ NκΉμ§μ μμ΄ μ€ μ°μν© 1μμ ꡬν μμ΄μμ λͺκ°μ μλ₯Ό μ ννμ¬ μ κ±°νμ§ μμμ λ μ΅λκ°
D[1][N] = κΈΈμ΄ NκΉμ§μ μμ΄ μ€ 0 ~ NκΉμ§μ μΈλ±μ€ μ€ νλμ μλ₯Ό μ κ±°νμ λ μ΅λκ°
μ κ³μ°νμμ΅λλ€.
D[0][N] - μ°μν© 1 λ¬Έμ μ λμΌ
1) D[0][1] = v[0] κΈΈμ΄κ° 1μΈ μμ΄ μ€ λͺκ°μ μλ₯Ό μ ννμ λ ν©μ μ΅λκ°
2) (0 ~ N-1 κΉμ§μ μ΅λ μ°μν© κ° + μμ΄μ Nλ²μ§Έ κ°) < (μμ΄μ Nλ²μ§Έ κ°) μΈ κ²½μ°
: 0 ~ N-1κΉμ§μ μ΅λ μ°μν© κ° + μμ΄μ Nλ²μ§Έ κ°μ λν κ°μ΄ μμ΄μ Nλ²μ§Έ κ°λ³΄λ€ μλ€λ©΄ 0~N-1κΉμ§μ μ΅λ μ°μν© κ°μ μμ΄λ²λ¦¬κ³ , μλ‘ μ°μν© μμ΄μ μμν΄μΌκ² μ£ . λ°λΌμ D[N][0]μ μ°μν© μμ΄μ μμμ΄ λμ΄μΌ νλ―λ‘ D[0][N] κ°μ μμ΄μ Nλ²μ§Έ κ°μΌλ‘ μ΄κΈ°ν ν΄μ£Όμ΄μΌ ν©λλ€.
3) (0 ~ N-1 κΉμ§μ μ΅λ μ°μν© κ° + μμ΄μ Nλ²μ§Έ κ°) >= (μμ΄μ Nλ²μ§Έ κ°) μΈ κ²½μ°
: D[0][N]μ 0~ N-1 κΉμ§μ μ΅λ μ°μν© κ°μμ μμ΄μ Nλ²μ§Έ κ°μ λν΄μ€ κ°μ΄ λ©λλ€. μ°μν© μμ΄μ μλ‘ μμνμ§ μκ³ κ³μν΄μ λν΄μ€λ€λ μλ―Έ
4) λμΆν μ νμ D[0][N] = max(D[0][N-1] + v[N] , v[N])
1λ²μ§Έ μ νμ ꡬν μ½λ
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n'
using namespace std;
int n;
vector<int> v(100001,0);
int d[3][100001];
int ans = -1001;
int main()
{
FASTio;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> v[i];
}
d[0][0] = v[0];
for(int i=1;i<n;i++)
{
d[0][i] = max(v[i]+d[0][i-1],v[i]);
}
μ§κΈκΉμ§ μ κ±°νμ§ μμ κ²½μ°μ λν΄ κΈΈμ΄ NκΉμ§μ μμ΄μ μ°μν©μ μ΅λκ°μ D[0][N]μ ꡬνμμ΅λλ€.
μ΄μ D[1][N] = κΈΈμ΄ NκΉμ§μ μμ΄μμ 0 ~ NκΉμ§μ μΈλ±μ€ μ€ νλμ μλ₯Ό μ κ±°νμ λ μμ΄ μ°μκ°μ μ΅λκ°μ ꡬν΄λ΄ μλ€.
1) D[1][1] = μΈλ±μ€ 1~1κΉμ§ 1κ°μ μλ₯Ό μ κ±°νμ λ μ΅λκ° ( 1λ²μ§Έ μΈλ±μ€λ₯Ό μ§μ°κ² λμ΄ 0μ΄λΌκ³ μκ°νλλ° 0μ λμ νκ³ μ±μ ν΄λ³΄λ νλ Έμ΅λλ€. λ¬Έμ μ 쑰건μλ μ΄ μ‘°κ±΄μ΄ μ μλμ΄ μμ§ μμ§λ§, μλ§λ κΈΈμ΄κ° 2μ΄μμΌ λλ§ μ κ±°ν μ μλ κ² κ°μ΅λλ€ )
2) D[1][2] = 1~2κΉμ§ μΈλ±μ€ μ€ 1κ° μ κ±°μ μ°μ μμ΄μ μ΅λκ° = 10 ( 2λ²μ§Έ μΈλ±μ€ κ°μ μ§μμ 10 )
3) D[1][3] = 1~3κΉμ§ μΈλ±μ€ μ€ 1κ° μ κ±°μ μ°μ μμ΄μ μ΅λκ° = 13 ( 2λ²μ§Έ μΈλ±μ€ κ°μ μ§μ 13 )
...
7) D[1][7] = 1~7κΉμ§ μΈλ±μ€ μ€ 1κ° μ κ±°μ μ°μ μμ΄μ μ΅λκ° = 21 ( 7λ²μ§Έ μΈλ±μ€ κ°μ μ§μ μ κ²½μ° )
Nλ²μ§Έ μΈλ±μ€ κ°μ μ κ±°ν κ²½μ°μ μ°μ μμ΄μ μ΅λκ°μ
0~N-1 μ€ μ무κ²λ μ κ±°νμ§ μμμ κ²½μ° μ°μ μμ΄μ μ΅λκ°κ³Ό κ°μ΅λλ€. λ°λΌμ D[0][N-1]λΌκ³ λ³Ό μ μμ΅λλ€.
λ°λΌμ μ νμμ D[1][N] = max(v[N] + D[1][N-1], D[0][N-1])μΌλ‘ μ λν μ μμ΅λλ€.
2λ²μ§Έ μ νμ ꡬν μ½λ
d[1][0] = v[0];
for(int i=1;i<n;i++)
{
d[1][i] = max(d[1][i-1] + v[i], d[0][i-1]);
}
λ§μ§λ§μΌλ‘ 첫λ²μ§Έ μ νμμμ 1~NκΉμ§μ D[0][N]μ μ΅λκ°κ³Ό, λλ²μ§Έ μ νμμμ 1~NκΉμ§μ D[1][N]μ μ΅λκ°μ ꡬνκ³ , μ΄ λ μ΅λκ° μ λΉκ΅νμ¬ λ ν° κ°μ΄ μ λ΅μ΄ λκ² μ΅λλ€.
μ 체 μμ€ μ½λ
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n'
using namespace std;
int n;
vector<int> v(100001,0);
int d[3][100001];
int ans = -1001;
int main()
{
FASTio;
cin >> n;
for(int i=0;i<n;i++)
{
cin >> v[i];
}
d[0][0] = v[0];
for(int i=1;i<n;i++)
{
d[0][i] = max(v[i]+d[0][i-1],v[i]);
}
d[1][0] = v[0];
for(int i=1;i<n;i++)
{
d[1][i] = max(d[1][i-1] + v[i], d[0][i-1]);
}
for(int i=0;i<2;i++)
{
for(int j=0;j<n;j++)
{
ans = max(ans,d[i][j]);
}
}
cout << ans;
return 0;
}
'π CS > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[DP] 11053. κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄ 4 (0) | 2023.09.12 |
---|---|
[Stack νμ©] 17299. μ€λ±ν°μ (0) | 2023.09.08 |
[Stack νμ©] 17298. μ€ν°μ (0) | 2023.09.08 |
[C++] cin.ignore()μΌλ‘ λ²νΌ λΉμ°κΈ° (0) | 2023.09.04 |
그리λ μκ³ λ¦¬μ¦(Greedy Algorithm) (0) | 2023.02.13 |
λΈλ‘κ·Έμ μ 보
Study Repository
rlaehddnd0422