CodeForces 679B Bear and Tower of Cubes
$dfs$,贪心。
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<set> #include<queue> #include<stack> #include<iostream> using namespace std; typedef long long LL; const double pi=acos(-1.0),eps=1e-6; void File() { freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout); } template <class T> inline void read(T &x) { char c=getchar(); x=0; while(!isdigit(c)) c=getchar(); while(isdigit(c)) {x=x*10+c-'0'; c=getchar();} } LL n,ans2; int ans1; void dfs(LL x,int a1,LL a2) { if(a1>ans1) ans1=a1,ans2=a2; else if(a2==ans1) ans2=max(ans2,a2); if(x==0) return; LL L=1,R=100000,pos; while(L<=R) { LL mid=(L+R)/2; if(mid*mid*mid<=x) pos=mid,L=mid+1; else R=mid-1; } dfs(x-pos*pos*pos,a1+1,a2+pos*pos*pos); if(pos*pos*pos-1-(pos-1)*(pos-1)*(pos-1)>=0) dfs(pos*pos*pos-1-(pos-1)*(pos-1)*(pos-1),a1+1,a2+(pos-1)*(pos-1)*(pos-1)); } int main() { scanf("%lld",&n); dfs(n,0,0); printf("%d %lld\n",ans1,ans2); return 0; }