SRM501 Div1 Easy FoxPlayingGame

2015/06/21 (Sun) SRM アドホック

問題

問題文

はじめ,手元に $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;
    }
};