백준 22871번: 징검다리 건너기 (large)
징검다리 건너기 (large)
아이디어
cur->next로 가는 비용을 구할 때 cur->i로 가는 비용, i->next로 가는 비용중 더 큰 값을 취하고, 이렇게 취한 값중 가장 작은 값을 구한다.
코드
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int MAX = 5001;
int N, arr[MAX], cache[MAX][MAX];
int solve(int cur, int next) {
if (cur == N) return 0;
int& ret = cache[cur][next];
if (ret != -1) return ret;
ret = LLONG_MAX;
for (int i = cur+1; i < N+1; i++) {
int nc = (i-cur)*(1+abs(arr[i]-arr[cur]));
ret = min(ret, max(nc, solve(i, next)));
}
return ret;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i < N+1; i++) {
cin >> arr[i];
}
memset(cache, -1, sizeof(cache));
cout << solve(1, N);
return 0;
}
여담
int 범위를 벗어나니 조심.
Author And Source
이 문제에 관하여(백준 22871번: 징검다리 건너기 (large)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ks1ksi/백준-22871번-징검다리-건너기-large저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)