bool check(int n){
return n == (int)sqrt(n) * sqrt(n);
}
int numSquares(int n) {
// write code here
vector<int> dp(n+1,INT_MAX);
for(int i=1;i<=n;i++)
if(check(i))
dp[i]=1;
else{
for(int j=1;j<=i/2;j++)
dp[i] = min(dp[i], dp[j] + dp[i-j]);
}
return dp[n];
}