zoukankan      html  css  js  c++  java
  • 东华大学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--){
    17         int n;
    18         scanf("%d", &n);
    19         
    20         vector<int > a(n + 10);
    21         vector<int > dp(n + 10, -INF);
    22         for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
    23         dp[0] = 0;
    24         for(int i = 1; i <= n; ++i){
    25             int x = 1;
    26             for(int j = 1; j <= 5; ++j){
    27                 if(i - j < 0) continue;
    28                 x *= a[i - j + 1];
    29                 dp[i] = max(dp[i], dp[i - j] + x);
    30             }
    31         }
    32         //printf("ans = %d
    ", dp[n]);
    33         printf("%d
    ", dp[n]);
    34     }
    35 }
    36 
    37 int main(){
    38     
    39     solve();
    40     
    41     return 0;
    42 }
  • 相关阅读:
     随机选择数据库记录的方法
    交叉查询
    Delphi编辑器颜色设置
    Delphi Dll中多线程无法使用Synchronize同步的解决方法(转)
    Delphi FTP例子源码
    DELPHI之备忘四
    界面美化代码
    使Form响应滚轮事件
    配色卡
    Delphi http传输备忘
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/13088354.html
Copyright © 2011-2022 走看看