https://www.acmicpc.net/problem/1699
1699번: 제곱수의 합
어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 “11은 3개 항의 제곱수 합으로 표현할 수 있다.”라고 말한다. 또한 11은 그보다 적은 항의 제곱수 합으로 표현할 수 없으므로, 11을 그 합으로써 표현할 수 있는 제곱수 항의 최소 개수는
www.acmicpc.net
💡 내 코드(C++)
/*[1699] 제곱수의 합*/
/*https://www.acmicpc.net/problem/1699 */
/*dp*/
#include <iostream>
#include <cmath>
using namespace std;
int main(void)
{
int n, temp = 0, j, min = 0;
int dp[100100] = { 0 };
dp[0] = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
for (j = 1;; j++) {
if ((pow(j, 2) <= i) && (i < pow(j + 1, 2)))
break;
}
min = dp[i - 1];
for (int k = 1; k <= j; k++) {
temp = pow(k, 2);
if (dp[i - temp] < min)
min = dp[i - temp];
}
dp[i] = min + 1;
}
cout << dp[n];
}
반응형
'Baekjoon > DP' 카테고리의 다른 글
[2163] 초콜릿 자르기 (0) | 2019.09.15 |
---|---|
[2133] 타일 채우기 (0) | 2019.09.15 |
[1912] 연속합 (0) | 2019.09.15 |
[1904] 01타일 (0) | 2019.09.15 |
[1463] 1로 만들기 (0) | 2019.07.23 |