站外题目,有题目,代码,题解,关注
  • 板块题目总版
  • 楼主kimi0705
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/10/16 15:34
  • 上次更新2023/11/2 13:27:50
查看原帖
站外题目,有题目,代码,题解,关注
637788
kimi0705楼主2023/10/16 15:34
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3e5 + 10;
int n, now, ans, Now;
int Map[3][N];
int sum[N];
int dp[N];  // 左边蛇形过来的能量
int dp1[N]; // 右边终点为 (1, i) 的能量。
int dp2[N]; // 右边终点为 (2, i) 的能量。
signed main()
{
    scanf("%lld", &n);
    for (int i = 1; i <= n; i++)
        scanf("%lld", &Map[1][i]);

    for (int i = 1; i <= n; i++)
        scanf("%lld", &Map[2][i]);

    for (int i = n; i >= 1; i--)
        sum[i] = sum[i + 1] + Map[1][i] + Map[2][i];

    for (int i = 1; i <= n; i++)
        if (i & 1)
            dp[i] = dp[i - 1] + Map[1][i] * 2 * (i - 1) + Map[2][i] * (2 * i - 1);
        else
            dp[i] = dp[i - 1] + Map[2][i] * 2 * (i - 1) + Map[1][i] * (2 * i - 1);
    // for (int i = 1; i <= n; i++) cout << dp[i] << ' ';
    // cout << '\n';
    for (int i = n; i >= 1; i--)
    {
        dp1[i] = dp1[i + 1] - sum[i + 1] + Map[1][i] * (2 * n - 1) + Map[2][i] * (2 * i - 2);
        dp2[i] = dp2[i + 1] - sum[i + 1] + Map[2][i] * (2 * n - 1) + Map[1][i] * (2 * i - 2);
    }
    for (int i = 1; i <= n; i++)
    {
        if (i & 1)
            ans = max(ans, dp[i] + dp2[i + 1]);
        else
            ans = max(ans, dp[i] + dp1[i + 1]);
    }
    cout << ans;
    return 0;
}
2023/10/16 15:34
加载中...