SRM501 Div1 Easy FoxPlayingGame
問題
はじめ,手元に $0$ があり,「$A$ たす」という操作を $nA$ 回,「$B$ かける」という操作を $nB$ 回好きな順番で行える. 最終的な結果を最大化しなさい.
方針
掛け算する前に絶対値は大きくしておいたほうが良いので,まず最初に足し算しておく. 次に掛け算の回数を全探索する. $nA$ 回しなければいけないという制限はあるが, $0$ に掛け算しても結果は変わらないので,事前にそうしておけば回数を調整できる.
かなり適当に出したけど通ってしまった.
実装
class FoxPlayingGame {
public:
double theMax( int nA, int nB, int paramA, int paramB ) {
double A = 1. * paramA/1000;
double B = 1. * paramB/1000;
double ans = -1e300;
rep(i,nB+1) ans = max(ans, A*nA*pow(B,i));
return ans;
}
};