[白俊]1699次平方数の和-Java,Java


難易度


銀色.

質問する


https://www.acmicpc.net/problem/1699

に答える


  • テーブルの定義
    dp[i]=平方和の最小個数

  • 点火式を探す
    13は
    (13-1)の最小二乗和+1
    (13-4)の最小二乗和+1
    (13-9)の最小二乗和+1
    最小値
  • if (d[i] > d[i - j * j] + 1) {
    	d[i] = d[i - j * j] + 1;
    }
  • 初期値の決定
    d[i]=i
  • コード#コード#

    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    // 1699번 제곱수의 합
    public class boj_13_1699 {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = Integer.parseInt(br.readLine());
    
            int d[] = new int[n + 1];
    
            for (int i = 1; i <= n; i++) {
                d[i] = i;
                for (int j = 1; j * j <= i; j++) {
                    if (d[i] > d[i - j * j] + 1) {
                        d[i] = d[i - j * j] + 1;
                    }
                }
            }
            System.out.println(d[n]);
        }
    }