#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; }