#include <bits/stdc++.h>
//动态规划的思想用存储前面计算过的东西,加以利用
//完全平方数可以多次使用,类似完全背包,正好等于n的时候的用值最少
using namespace std;
#define N (int)(1e4+5)
int dp[N];
//体积为完全平方数的值
int volume[N];
//价值全部为1
int my_min(int a,int b){
return (a<b)?a:b;
}
//正序
int main(){
int n,v;
scanf("%d",&n);
v=(int)sqrt(n);
for(int i=1;i<=v;i++){
volume[i]=i*i;
}
for(int i=1;i<=n;i++)
{
dp[i]=INT_MAX;
}
for(int i=1;i<=v;i++)
{
for(int j=volume[i];j<=n;j++)
{
dp[j]=my_min(dp[j],dp[j-volume[i]]+1);
}
}
printf("%d\n",dp[n]);
return 0;
}



京公网安备 11010502036488号