728x90
https://www.acmicpc.net/problem/21317
쉬운문제인데 C++ 공부를 위해 풀었다.
현재 단계에 있는 모든 돌들을 확인하면서 다음 단계를 추가하고 가장 마지막에 있는 돌에서 최솟값을 찾는 방식으로 풀었다.
#include<iostream>
#include<vector>
using namespace std;
int find_energy(int n, int super_jump, int jump[20][2]) {
int i, j, cur, cur_chance, ret;
vector<pair<int, int>> memo[20];
memo[0].push_back(make_pair(0, 1));
for (i = 0; i < n; i++)
{
//cout << memo[i].size() << endl;
for (j = 0; j < memo[i].size(); j++)
{
cur = memo[i][j].first;
cur_chance = memo[i][j].second;
if (i + 1 < n)
{
memo[i+1].push_back(make_pair(cur + jump[i][0], cur_chance));
}
if (i + 2 < n) {
memo[i+2].push_back(make_pair(cur + jump[i][1], cur_chance));
}
if (cur_chance && i + 3 < n) {
memo[i+3].push_back(make_pair(cur + super_jump, 0));
}
}
}
ret = 200000;
for (i = 0; i < memo[n-1].size(); i++)
{
if (ret > memo[n - 1][i].first)
ret = memo[n - 1][i].first;
}
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n, i, j, k;
int jump[20][2];
cin >> n;
for (i = 0; i < n - 1; i++)
{
cin >> jump[i][0] >> jump[i][1];
}
cin >> k;
cout << find_energy(n, k, jump);
return 0;
}
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 11655 ROT13 C,C++ (0) | 2022.02.21 |
---|---|
[백준] 1890 점프 C/C++ (0) | 2022.02.20 |
[백준] 9019 DSLR C++ (0) | 2022.02.18 |
[백준] 1717 집합의 표현 python (0) | 2022.02.17 |
[백준] 2239 스도쿠 python(pypy) (0) | 2022.02.16 |