平方和

描述

 

输入一个int范围内的正整数n,现在请你计算一下,n最少可以由多少个正整数的平方数累加得到,例如10=1^2+3^2(2个),16=4^2(1个)。

输入

 

输入一个正整数n。

输出

 

输出n最少可以由多少个正整数的平方数累加得到。

输入样例 1 

10

输出样例 1

2

输入样例 2 

16

输出样例 2

1

 1 #include <bits/stdc++.h>
 2 #define sd(a) scanf("%d",&a)
 3 using namespace std;
 4 int dp[40000];
 5 int main()
 6 {
 7     int n;
 8     sd(n);
 9     dp[0]=0;
10     for(int i=1;i<=n;i++)
11     {
12             dp[i]=dp[i-1]+1;
13         for(int j=2;j*j<=i;j++){
14             dp[i]=min(dp[i],dp[i-j*j]+1);
15         }
16         
17     }
18     cout<<dp[n];
19     return 0;
20 }

猜你喜欢

转载自www.cnblogs.com/esther6/p/10713883.html