결국... 못풀고 참고했다..
배울점은 매개변수 인자가 &일때를 생각해야 된다는 것이다!! 2차원 배열같은 큰 컬렉션은 &로 받으면서 참조를 통해 시간을 단축시킬 수 있다!
다시 보기.. ㅜㅜ
DP + 메모이제이션으로 푸는 문제였다.
#include <bits/stdc++.h>
using namespace std;
int maxAlp, maxCop;
int cache[151][151]; //현재 alp,cop만큼의 능력이 있을때,
int solve(int alp, int cop, vector<vector<int>>& problems) {
if(alp >= maxAlp && cop >= maxCop) return 0;
// 최댓값을 넘어갈 시 공간 크기 조정
if(alp > maxAlp) alp = maxAlp;
if(cop > maxCop) cop = maxCop;
int& ret = cache[alp][cop];
if(ret != 0) return ret;
ret = 1e9;
// 문제 풀이
for(vector<int> v : problems) {
if(alp < v[0] || cop < v[1]) continue;
ret = min(ret, solve(alp + v[2], cop + v[3], problems) + v[4]);
}
// 공부
ret = min(ret, solve(alp + 1, cop, problems) + 1);
ret = min(ret, solve(alp, cop + 1, problems) + 1);
return ret;
}
int solution(int alp, int cop, vector<vector<int>> problems) {
for(vector<int> v: problems) {
maxAlp = max(maxAlp, v[0]);
maxCop = max(maxCop, v[1]);
}
return solve(alp, cop, problems);
}
'코테공부' 카테고리의 다른 글
C++ STL FIND (0) | 2023.08.22 |
---|---|
c++ Priority_queue Compare 정의 (0) | 2022.12.01 |
다익스트라 알고리즘 (0) | 2022.11.04 |
난쟁이마을 c++ (0) | 2022.09.20 |
stringstream (1) | 2022.09.19 |