#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
#define fs first
#define se second
#define pb push_back
#define Int __int128
#define No cout<<"No"<<endl
#define Yes cout<<"Yes"<<endl
#define NO cout<<"NO"<<endl
#define YES cout<<"YES"<<endl
#define sz(v) ((int)v.size())
typedef long long ll;
typedef pair<ll,ll> pr;
typedef unsigned long long ull;
const ll mod=998244353;
const ll N=1e6+10;
const ll inf=0x3f3f3f3f3f3f3f3f;
ll fact[20],ans;
ll cnt(ll x)
{
ll res=0;
while(x)
{
if(x&1) res++;
x>>=1;
}
return res;
}
void dfs(ll now,ll le,ll cost)
{
if(le>15||now<0) return ;
ans=min(ans,cnt(now)+cost);
dfs(now-fact[le],le+1,cost+1);
dfs(now,le+1,cost);
}
void solve()
{
ll n;cin>>n;
ans=inf;
fact[1]=1;
for(int i=2;fact[i]<1e12;i++) fact[i]=fact[i-1]*i;
dfs(n,3,0);
cout<<ans<<endl;
}
signed main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int T=1;
cin>>T;
while(T--) solve();
}
通过dfs来优化dp
最新推荐文章于 2024-07-19 15:45:46 发布