2012-Space Coconut Grab
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=2012&lang=jp
考え方
x + y^2 + z^3 = e
x + y + z = m
の時のmの最小値を求める問題だが、z=t(定数)とすると
x + y^2 = e - t^3
の時の、x + yの最小値を求める問題となり、
x>=0ならばx^2>=xよりyを最大にするようなxを取れば良いことが分かる。
全てのzについてこれを試せば良い。
計算量はO(cbrt(e))
実装(C++)
#include <cmath> #include <iostream> using namespace std; int e,r,t; int main(){ for(;(cin>>e),e;r=0){ int z;int r=1<<30; for(z=0;z*z*z<=e;z++){ t=sqrt(e-z*z*z); r=min(e-z*z*z-t*t+t+z,r); } cout<<r<<endl; } return 0; }