东华大学2020年程序设计竞赛(同步赛) G Gaming with Mia
G Gaming with Mia 思路:我们能找出某些情况: -1 1 -1 -1 1 1 -1 -1 1 1 1 -1 -1 1 ... 1 -1 我们发现如果大于5个数相乘,则它一定可以分解成其他更优的情况相乘再相加。(当然如果出现0,也可以最极限情况5个数相乘) 时间复杂度就是:O(1e6*10*5) 那么我们就可以进行dp,例如: dp[5] = dp[4] + a[5]; dp[5] = dp[3] + a[5] * a[4]; dp[5] = dp[2] + a[5] * a[4] * a[3]; dp[5] = dp[1] + a[5] * a[4] * a[3] * a[2]; dp[5] = dp[0] + a[5] * a[4] * a[3] * a[2] * a[1]。 总共五种情况,然后取max。 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <vector> 5 6 using namespace std; 7 8 #define ll long long 9 10 const int INF = 1e9; 11 12 void solve(){ 13 14 int T; 15 scanf( " %d " , & T); 16 while (T--