최솟값을 찾아라면서 최대값을 찾는 문제. 문제를 풀면서 자료구조의 범위 지정에 신경쓰는 연습을 해야할듯
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <iostream> #include <cstring> #include <algorithm> int N, K; int minTimes[1001]; int cache[1002]; int connect[1001][1001]; int target; using namespace std; int getMinCraft(int target) { int &ret = cache[target]; if (ret != -1) return ret; ret = minTimes[target]; for (int i = 1; i <= N; i++) if (connect[target][i] == 1) ret = max(ret, getMinCraft(i) + minTimes[target]); return ret; } int main() { int cases; cin >> cases; while (cases--) { cin >> N >> K; for (int i = 1; i <= N; i++) cin >> minTimes[i]; memset(cache, -1, sizeof(cache)); memset(connect, 0, sizeof(connect)); for (int i = 1; i <= K; i++) { int y,x; cin >> y; cin >> x; connect[x][y] = 1; } cin >> target; cout << getMinCraft(target) << endl; } //system("pause"); return 0; } | cs |
'* Computer Science > Algorithm' 카테고리의 다른 글
baekjun 2293. 동전1 (0) | 2018.08.08 |
---|---|
baekjun 10844. 쉬운 계단 수 (0) | 2018.08.06 |
baekjun 1463. 1로 만들기 (0) | 2018.08.02 |
baekjun 2579. 계단 오르기 (0) | 2018.08.02 |
baekjun 1923. 정수 삼각형 (0) | 2018.08.01 |