SRM 463 500pt: Nisoku
問題概要
1.5<=x<=10.0の値が書かれたカードがN(<50)枚ある。このうち2枚を選んで和か積で置き換える。最後に残ったカードを最大化する問題。
考えたこと
practiceで通したコード
#include <vector> #include <algorithm> using namespace std; struct Nisoku { double theMax(vector <double> cards) { const int N = cards.size(); sort(cards.begin(), cards.end()); double ret = 0.0; for(int add=0; add<=N; add+=2){ double tmp = 1.0; for(int i=0; i<add-i-1; i++){ tmp *= cards[i] + cards[add-i-1]; } for(int i=add; i<N; i++){ tmp *= cards[i]; } ret = max(ret, tmp); } return ret; } };