3. 蛋滚派对
题目 ID:20297
必做题 100 分
最新提交: Wrong Answer 25 分
历史最高: Wrong Answer 25 分
时间限制: 2000ms
空间限制: 524288kB
题目描述
“趴着好难受啊蛋!我要透不过气了蛋!”
“我也不想仰着睡啊蛋!!!”
“那咱俩都翻过来睡呗蛋!”
n 个蛋蛋排成一排睡觉,有些蛋蛋喜欢趴着睡,有些则喜欢仰着睡。你可以做任意次操作,使得相邻的两个蛋蛋都翻过来睡。它们最开始都有个愉悦值,对于任何一个蛋蛋,翻过来之后愉悦值都会变成原来的相反数。
请你最大化它们的愉悦值之和,并回答这个值。
注意:第 1 个蛋蛋和第 n 个蛋蛋不相邻!
输入格式
第一行一个正整数 n ,表示蛋蛋的数量。
第二行 n 个整数,其中第 i 个整数 a_i 表示第 i 个蛋蛋的初始愉悦值。
输出格式
一个整数,表示操作后的最大愉悦值之和。
样例
Input 1
3 -10 5 -4
Output 1
19
Input 2
5 10 -4 -8 -11 3
Output 2
30
Input 3
11 -1000000000 1000000000 -1000000000 1000000000 -1000000000 0 1000000000 -1000000000 1000000000 -1000000000 1000000000
Output 3
10000000000
样例解释
样例一中, 1,2 翻滚, 2,3 翻滚,最后愉悦值为 \{10, 5, 4\} ,总和为 19 。
样例二中, 2,3 翻滚, 4,5 翻滚,最后愉悦值为 ${10,4,8,11,-3}$,总和为 3030 。
数据范围
- 对于数据 1\sim 4 :1\leq n\leq 4000
- 对于数据 5\sim 20 :1\leq n\leq 10^5
- 对于所有数据: -10^9\leq a_i\leq 10^9
我的代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int n;
cin >> n;
vector < int > vec(n);
for(int i = 0;i < n;i++) cin >> vec[i];
vector < vector < int > > dp(n,vector < int > (2,0));
dp[0][0] = vec[0],dp[0][1] = 0 - vec[0];
for(int i = 1;i < n;i++)
{
dp[i][0] = max(dp[i - 1][0] + vec[i],dp[i - 1][1]+vec[i]);
dp[i][1] = dp[i - 1][0] - vec[i];
}
int ans = max(dp[n - 1][0],dp[n - 1][1]);
cout << ans;
return 0;
}
请问谁可以看一下本蒟蒻的代码 QAQ