반응형

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

 

1699번: 제곱수의 합

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

www.acmicpc.net

 

처음에 재귀함수로 풀다가 계속 시간초과가 나서 

 

dp로 풀었다

 

 

#include <bits/stdc++.h>
#include <unordered_set>
using namespace std;

int n, ans = INT_MAX;
vector<int> v;

int dp[100001];

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    fill(dp+1, dp + 100001, INT_MAX);
    cin >> n;

	for (int i = 1; i * i <= n; i++) {
        int tmp = i * i;
        for (int j = 0; j <= n; j++) {
            if (j - tmp >= 0) {
                dp[j] = min(dp[j], dp[j - tmp] + 1);
            }
        }
	}


    cout << dp[n] << '\n';

    return 0;
}

 

반응형

+ Recent posts