dp43 最少的完全平方数

给定一个正整数n,请找出最少个数的完全平方数,使得这些完全平方数的和等于n。完全平方指用一个整数乘以自己例如11,22,3*3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。例如:1,4,9,和16都是完全平方数,但是2,3,5,8,11等等不是

输入:5

输出:2

说明:1+4=5


int main()
{
    int n ;
    scanf("%d",&n);
    int mx = sqrt(n);
    if(mx*mx == n)
    {
        printf("1");
        return 0;
    }
    vector<int> dp(n+1,0x3f);
    dp[0] = 0;
    for(int i=1;i<=mx;i++) {
        for(int j=i*i;j<=n;j++) {
            dp[j] = min(dp[j],dp[j-i*i] + 1);
        }
    } 
    
    printf("%d\n",dp[n]);
    return 0;
}