SRM 501 div1 easy:FoxPlayingGame
SRM 501の練習会に参加。easyとmed通してそこそこでした。今回のmedは簡単だったしまぁ。
解法
あんまり推薦されない方法で解いてしまった感じがあるが,場合分けして通した。
無難にやりたいならdp[a][b]=(足し算の残り回数がa回で掛け算の残り回数がb回のときの最大値)みたいな感じでやれば良さそう。
class FoxPlayingGame { public: double theMax(int nA, int nB, int paramA, int paramB) { double ans = 0; double a = paramA / 1000.; double b = paramB / 1000.; if (a > 0) { if (b < 0) nB = nB/2*2; if (abs(b) < 1) { ans = a*nA; } else { ans = a*nA; for (int i = 0; i < nB; i++) { ans *= b; } } } else { if (b < 0) { if (b > -1) { ans = a*nA; if (nB > 0) ans *= b; } else { if (nB%2 == 0) nB--; ans = a*nA; for (int i = 0; i < nB; i++) { ans *= b; } } } else { if (b < 1) { ans = a*nA; for (int i = 0; i < nB; i++) { ans *= b; } } else { ans = a*nA; } } } return ans; } };