728x90
문제
https://www.acmicpc.net/problem/11060
문제 해결
1. 그 자리에서 3을 점프뛰면 앞, 앞앞, 앞앞앞까지 탐색하는데 현재 dp의 값+1과 탐색한 자리에 dp값과 비교해서 작은 값을 선택한다.
2. 만약 그 자리가 끝이거나 넘어서면 결과값의 dp이므로 현재 자리의 dp값과 결과값dp를 비교해서 작은값이 결과값dp가 된다.
코드
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 | #include <iostream> #define infy 987654321 using namespace std; i nt min(int a,int b){ if(a>b){return b;} else{return a;} } int main(void){ int N,ary[1002],dp[1002],result = infy,temp = infy; cin >> N; for(int i = 0;i<N;i++){ cin >> ary[i]; } if(N == 1){cout << 0;} else{ for(int i = 0;i<N;i++){dp[i] = infy;} dp[0] = 0; for(int i = 0;i<N;i++){ int next = ary[i]; for(int j = i+1;j<=i+next;j++){ if(j>=N-1){ temp = min(temp,dp[i]+1); } else{ dp[j] = min(dp[i]+1,dp[j]); } } } if(temp == infy){cout << "-1";} else{cout << temp;} } } | cs |
728x90
'다이나믹 프로그래밍' 카테고리의 다른 글
[백준/C++][퇴사2(15486번)] (0) | 2020.12.17 |
---|---|
[백준/C++][평범한 배낭(12865번)] (0) | 2020.12.15 |
[백준/C++][가장 긴 감소하는 부분 수열(11722번)] (0) | 2020.12.14 |
[C++/알고리즘][다이나믹 프로그래밍(동적계획법)-DP] (2) | 2020.12.09 |
[백준/C++][퇴사(14501번)] (0) | 2020.12.03 |