進口?Java . util . scanner;
公共?班級?主要?{
//用來存儲計算出的方法(n)以提高計算速度。
靜電?int?數據[]=新建?int[10000001];
公共?靜電?作廢?main(字符串?args[]){
int?n =新?掃描儀(System.in)。nextInt();
System.out.println(方法(n));
}
靜電?int?方法(int?n){
//如果n是壹個完整的平方數,返回結果?就壹次?遞歸退出
if(Math.pow((int)Math.sqrt(n),2)==n){
回歸?1;
}否則{
if(data[n]!=0){
回歸?數據[n];
}
//窮舉?如果是13,那就是窮舉。1+122+11?……
//執行f(1)+f(12)時
//f(1)=1,?F(12)然後執行窮舉,以此類推。
//最後得到次數最少的,比如f(4)+f(9)=2,就是最終結果。
int?min =方法(n-1)+方法(1);
for(int?I = 1;我& lt= n/2;i++){
if(方法(I)+方法(n-I)& lt;最小){
min =方法(I)+方法(n-I);
}
}
data[n]= min;
回歸?min
}
}
}