-
[BOJ 22871, C++] 징검다리 건너기(large)알고리즘/BOJ 2021. 8. 9. 22:21반응형
https://www.acmicpc.net/problem/22871
풀이
항상 오른쪽으로만 갈 수 있다고 했으므로 바로 DP문제라는 것을 알 수 있습니다.
돌로 건너갈 수 있는 모든 경우 중 K의 최솟값을 구하라고 했으므로 왼쪽 -> 오른쪽으로 가는 동안 쓰는 힘의 최대값들중에서 최솟값을 출력하면 됩니다.
코드
12345678910111213141516171819202122232425262728293031323334#include <iostream>#include <cstring>using namespace std;using ll = long long;const int N = 5001;int n;ll arr[N], dp[N];ll go(int x) {if (x == n - 1) return 0;ll& ret = dp[x];if (ret != -1) return ret;ret = 1e10;for (int i = x + 1; i < n; i++) {ret = min(ret, max(go(i), (i - x) * (1 + abs(arr[x] - arr[i]))));}return ret;}int main(){ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);memset(dp, -1, sizeof(dp));cin >> n;for (int i = 0; i < n; i++) cin >> arr[i];cout << go(0) << endl;return 0;}cs 반응형'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 12904, Python 3] A와 B (0) 2021.08.10 [BOJ 22869, C++] 징검다리 건너기 (small) (0) 2021.08.09 [BOJ 11000, Python 3] 강의실 배정 (0) 2021.08.09 [BOJ 2812, Python 3] 크게 만들기 (0) 2021.08.09 [BOJ 2212, Python 3] 센서 (0) 2021.08.09