yukicoder No.505
解説
基本的な解放の方針は動的計画法です。 最小値と最大値を保持して計算していけば、答えを求めることができます。 また除算もする必要があるので注意です。 例えば-9 3の場合 -9/3が最大の答えになります。
コード
#include <iostream> using namespace std; int main(void){ int n, a[100]; cin >> n; for(int i=0; i<n; i++){ cin >> a[i]; } long long sum, ma, mi; if(a[1] != 0){ ma = max(max(max(a[0]*a[1],a[0]+a[1]), a[0]-a[1]),a[0]/a[1]); mi = min(min(min(a[0]*a[1],a[0]+a[1]), a[0]-a[1]), a[0]/a[1]); }else{ ma = max(max(a[0]*a[1],a[0]+a[1]), a[0]-a[1]); mi = min(min(a[0]*a[1],a[0]+a[1]), a[0]-a[1]); } long long tmp_ma, tmp_mi; for(int i=2; i<n; i++){ if(a[i] != 0){ tmp_ma = max(max(max(max(ma*a[i],ma+a[i]), ma-a[i]),ma/a[i]), max(max(max(mi*a[i],mi+a[i]), mi-a[i]),mi/a[i])); tmp_mi = min(min(min(min(ma*a[i],ma+a[i]), ma-a[i]),ma/a[i]), min(min(min(mi*a[i],mi+a[i]), mi-a[i]),mi/a[i])); }else{ tmp_ma = max(max(max(ma*a[i],ma+a[i]), ma-a[i]), max(max(mi*a[i],mi+a[i]), mi-a[i])); tmp_mi = min(min(min(ma*a[i],ma+a[i]), ma-a[i]), min(min(mi*a[i],mi+a[i]), mi-a[i])); } ma = tmp_ma; mi = tmp_mi; } cout << ma << endl; return 0; }