#include using namespace std; const int N = 1e5 + 10; int n; int f[N]; // 状态表示:f[i]表示i个数最少需要多少个平方数 int main() { cin >> n; for (int i = 1; i <= n; i++) { f[i] = i; // 初始化,i个数最少需要i个平方数,因为最坏的情况就是每个数都是1 for (int j = 1; j <= sqrt(i); j++) // 枚举完全平方数 f[i] = min(f[i - j * j] + 1, f[i]); // 状态转移方程 } cout << f[n] << endl; return 0; }