반응형
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;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 2316번 : 도시 왕복하기 2 - Network Flow, 정점 분할 (0) | 2022.02.22 |
---|---|
백준 17412번: 도시 왕복하기 1 - Network Flow 문제 (0) | 2022.02.22 |
백준 11003번 : 최솟값 찾기 C++ (0) | 2022.02.19 |
백준 15683번 : 감시 C++ (0) | 2022.02.19 |
백준 12094번: 2048 (EASY) (0) | 2022.02.19 |