1463号:1


質問する



1463号:1

に近づく

  • 題で提案した3種類の演算条件に基づいて点火式を作成すればよい.
    dp[i] = dp[i-1] + 1
    dp[i] = dp[i/2] + 1 (i % 2 == 0)
    dp[i] = dp[i/3] + 1 (i % 3 == 0)
  • ビットの点火式に基づいて、演算回数の最大値を導出します.
  • マイコード

    import java.io.*;
    
    public class Main {
        static int[] dp = new int[1000005];
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
            dp[1] = 0;
            for (int i = 2; i <= n; i++) {
                dp[i] = dp[i-1] + 1;
                if (i % 2 == 0) dp[i] = Math.min(dp[i/2]+1, dp[i]);
                if (i % 3 == 0) dp[i] = Math.min(dp[i/3]+1, dp[i]);
            }
            System.out.println(dp[n]);
        }
    }