nowcoder_Jerry_dp

nowcoder_Jerry_dp

//
#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;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124851176