반응형

www.acmicpc.net/problem/1699

 

1699번: 제곱수의 합

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#define ll long long
using namespace std;
ll n, dp[100001];
 
int main() {
    cin >> n;
    fill(dp, dp + n + 1987654321);
    for (int i = 1; i * i <= n; i++)
        dp[i * i] = 1;
 
    // 1부터 n까지 채우기
    for (int i = 1; i <= n; i++) {
        // i 만들 수 있는 모든 경우의 수 다 해보기
        for (int j = 1; j * j <= i; j++)
            dp[i] = min(dp[i], 1 + dp[i - j * j]);
    }
    cout << dp[n];
}
cs
반응형

'백준 > DP' 카테고리의 다른 글

백준 11055  (0) 2021.02.17
백준 2225  (0) 2021.02.17
백준 1309  (0) 2021.02.17
백준 1932  (0) 2021.02.17
백준 1912  (0) 2021.02.17

+ Recent posts