이 문제는 DP+dijkstra 알고리즘으로 풀이가 가능하다.사실 말만 이렇지 정확히 이들의 교집합은 아니라서 "그래프탐색" 문제라고 하는게 정확하다. 이 문제를 처음 봤을 때 당황하는 이유는, 플레 이전에는 항상 변수가 1개인 다익스트라 혹은 다변수 DP 정도를 다뤄봤을 것이기 때문이다. 이 문제는 다익스트라의 관점에서라기 보다 DP의 관점에서 깊게 파고들면 충분히 해결 가능한 문제이다. 우리가 최종적으로 구하고자 하는건 "N번째 노드까지 도달하는 데 드는 최소비용" 이다. 고로, 평소 같았으면은 최소비용을 값으로 가지는 DP 테이블을 생각했을 것이다. 하지만 여기서 막막한게, DP[i] = i번째 노드까지의 최소비용 이라고 한다면 언제 어디서 주유를 해야하는지가 너무 큰 변수가 되어 아마 이대로..
문 제 설 명 위 문제는 사실 간단하다. O(n)의 반복문으로 A부터 B까지 3으로 나눠지거나 3,6,9 중 하나의 숫자 이상이 들어가 있는지 판별하면 풀 수 있다. int a,b,sum=0; std::cin>>a>>b; for(int i=a;i 30 ~ 39 . . . (참고로 10~19 -> 20~29에서 3의 배수는 한 칸 땅겨지고 3을 포함하는 경우는 3 , 6 , 9 그대로이므로 동일하다.) 고로 (10 ~ 19 + 00 ~ 09 + 30 ~ 39) * 3 + 10 ~ 19 로 나타낼 수 있다. memo[ i ][ 1 ] = ( memo[ i-1 ][ 1 ] + memo[ i-1 ][ 0 ] + memo[ i-1 ][ 3 ] ) * 3 + memo[ i-1 ][ 1 ]; 이렇게 일반화할 수 있다..