* 나의문제점 : 너무 그리디로 접근하려고함
그리디는 최후의 수단임.
완탐-> 완탐dp -> pq,정렬 -> 이분탐색 -> ... -> 그리디 순으로 접근하는게 맞음.
* 완탐
* 완탐 + dp
int dp[10000+4];
vector<int> nums;
class Solution {
public:
int jump(vector<int>& _nums) {
memset(dp,-1,sizeof(dp));
nums=_nums;
return dfs(0);
}
int dfs(int pos){
if(pos>=nums.size()-1){
return 0;
}
if(dp[pos]!=-1) return dp[pos];
dp[pos]=10001; //도달할수없는값
for(int j=1;j<=nums[pos];++j){ //모든 점프가능한곳에대해
dp[pos]=min(dp[pos],dfs(pos+j)+1);
}
return dp[pos];
}
};
dp[pos] = min()이부분이 어떻게 작동하는지 반드시 알아야함!
* 그리디 + bfs?
이걸 O(N)에 푸는 이런게 가능하다니..
'Algorithm > dp' 카테고리의 다른 글
[알고리즘] leetcode 790. 도미노와 트로미노 타일링 c++ // dp (0) | 2024.07.03 |
---|---|
[알고리즘] 리트코드 1696. 점프 게임 VI c++ // set, deque dp (0) | 2024.07.02 |
[알고리즘] 리트코드 최대하위배열 c++ // dp (0) | 2024.07.01 |
[알고리즘] 리트코드 고유경로 c++ // dp 모든유형 (0) | 2024.07.01 |
리트코드 338. Counting Bits c++ // 1의갯수세기, dp, 비트 (0) | 2024.05.21 |