728x90
반응형
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 | #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <vector> #include <algorithm> using namespace std; // 문제 n까지 연산의 최솟값 구하기 // -1,/2,/3,/5 연산 가능 #define MAX 30001 int n,minN; vector<int> dp(MAX); int main() { ios::sync_with_stdio(false); // 계산시간 단축 // 문제마다 오류 유무 다름 cin.tie(NULL); cout.tie(NULL);// 입출력 시간 단축 cin >> n; // dp -1,/2,/3,/5 4가지 연산중 최소값을 고려 // dp점화식: ai=min(ai-1, ai/2,ai/3,ai/5)+1 dp[1] = 0; for (int i = 2; i <= n; i++) { minN = dp[i - 1]; // -1을 한 것까지의 최소 연산 횟수 if (i % 2 == 0) { minN = min(minN, dp[i / 2]); } if (i % 3 == 0) { minN = min(minN, dp[i / 3]); } if (i % 5 == 0) { minN = min(minN, dp[i / 5]); } dp[i] = minN + 1; // 4가지 경우중 쵯솟연산에서 연산을 한 것이 i까지 최소연산 } cout << dp[n]; return 0; } | cs |
반응형
'Algorithm_이코테' 카테고리의 다른 글
[이코테 DP] 04. 병사 배치하기 (0) | 2021.07.18 |
---|---|
[이코테 DP] 03. 효율적인 화폐구성 (0) | 2021.07.17 |
[이코테 DP] 01. 개미전사 (0) | 2021.07.17 |