//
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+6;
int dp[N];
void solve()
{
int i,j;
// 1e5 not be behind the initial position
// or more than 10^5 distance in front of the initial position
vector<int> v;
for( i=0;i*i<=1e5;i++ ) v.push_back( i*i );
memset( dp,0x3f,sizeof( dp ) );
for( i=0;i<v.size();i++ ) dp[ v[i] ]=1; // init
for( i=0;i<v.size();i++ )
for( j=i;j<v.size();j++ )
dp[ v[j]-v[i] ]=min( dp[ v[j]-v[i] ],2 );
for( i=0;i<v.size();i++ )
for( j=v[i];j<=1e5;j++ ) // 1e5
dp[j]=min( dp[j],dp[j-v[i]]+1 );
}
int main()
{
int q,n; solve();
cin>>q;
while( q-- )
{
cin>>n; cout<<dp[n]<<endl;
}
return 0;
}
nowcoder_Jerry_dp
猜你喜欢
转载自blog.csdn.net/qq_63173957/article/details/124851176
今日推荐
周排行