5 条题解

  • 0
    @ 2026-5-11 17:24:35
    #include <bits/stdc++.h>
    using namespace std;
    int minn=INT_MAX,n,f[100000];
    void dfs(int deep,int s,int k){
        if(s==0){
            minn=min(minn,k);
            return ;
        }
        if(deep==0) return ;
        int x=s%(deep*deep);
        if(f[x]<=k+s/(deep*deep)) dfs(deep-1,s,k);
        else{
            f[x]=k+s/(deep*deep);
            dfs(deep-1,x,k+s/(deep*deep));
            dfs(deep-1,s,k);
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        for(int i=0;i<=99999;i++) f[i]=INT_MAX;
        cin>>n;
        dfs(sqrt(n),n,0);
        cout<<minn;
        return 0;
    }
    

    信息

    ID
    381
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者