반응형
<코드>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int dp[50001];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
dp[1] = 1;
for (int i = 1; i <= n; i++)
{
dp[i] = dp[1] + dp[i - 1];
for (int j = 2; j * j <= i; j++)
{
dp[i] = min(dp[i], 1 + dp[i - j * j]);
}
}
cout << dp[n];
}
풀이 방법
예시 : dp[101]을 구하는 방법
dp[1] + dp[100]
dp[4] + dp[97]
dp[9] + dp[92]
dp[16] + dp[85]
...
dp[64] + dp[37]
dp[81] + dp[20]
이중에서 가장 작은 값을 고르면 됩니다.
(dp[1], dp[4], dp[9] 등등 제곱수인것은 모두 값이 1이다.)
www.acmicpc.net/problem/17626
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[C/C++] 백준 1322번 - X와 K (0) | 2021.01.30 |
---|---|
[C/C++] 백준 12904번 - A와 B (0) | 2021.01.30 |
[C/C++] 백준 3109번 - 빵집 (0) | 2021.01.28 |
[C/C++] 백준 3673번 - 나눌 수 있는 부분 수열 (0) | 2021.01.28 |
[C/C++] 백준 3020번 - 개똥벌레 (0) | 2021.01.28 |