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

 

1699번: 제곱수의 합

어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다

www.acmicpc.net

1/10

더보기
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n;
    vector<int> dp;
    cin >> n;
    dp.resize(n + 1);   

    for (int i = 1; i <= n; i++) {
        dp[i] = 100000;
    }

    for (int i = 1; i <= n; i++) {
        int p = 100000;
        for (int j = 1; j*j <= i; j++) {
            p = (p < dp[i - j * j] ? p : dp[i - j * j]);            
        }
        dp[i] = p + 1;
    }

    /*for (int i = 1; i <= n; i++) {
        cout << dp[i] << " ";
    }*/
    cout << dp[n] << endl;

    return 0;
}