Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- //int calculate(int N);
- int dp[100];//dp[i] : i를 1로 만들기 위한 최소한의 연산 횟수
- int main() {
- int N;
- cin >> N;
- dp[1] = 0;
- for (int i = 2; i <= N; i++) {
- dp[i] = dp[i - 1] + 1;
- if (i % 2 == 0 && dp[i] > dp[i / 2] + 1) {
- dp[i] = dp[i / 2] + 1;
- }
- if (i % 3 == 0 && dp[i] > dp[i / 3] + 1) {
- dp[i] = dp[i / 3] + 1;
- }
- }
- cout << dp[N];
- //cout << calculate(N);
- return 0;
- }
- /*int calculate(int N) {
- if (N == 1) {
- return 0;
- }
- else if (N % 3 == 0) {
- if (calculate(N / 3) < calculate(N - 1)) {
- dp[N] = calculate(N / 3) + 1;
- }
- else {
- dp[N] = calculate(N - 1) + 1;
- }
- return dp[N];
- }
- else if (N % 2 == 0) {
- if (calculate(N / 2) < calculate(N - 1)) {
- dp[N] = calculate(N / 2) + 1;
- }
- else {
- dp[N] = calculate(N - 1) + 1;
- }
- return dp[N];
- }
- else {
- dp[N] = calculate(N - 1) + 1;
- return dp[N];
- }
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement