#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e4 + 5;
int dp[MAXN];
signed main()
{
int n;cin >> n;
memset(dp, 0x1f, sizeof(dp));//要求最小值就初始化为较大的数
dp[0] = 0;//1.0的完全平方数和为0 2.是为了后续求dp[i]时能知道是否可以组成n
for(int i = 1; i <= n; i++)
{
for(int j = 1;j*j <= i; j++)//枚举j的平方的范围
{
dp[i] = min(dp[i],dp[i-j*j]+1);//当前数i减去j的平方值能组成的最小完全平方数+1
}
}
cout << dp[n] << endl;
return 0;
}

京公网安备 11010502036488号