Particles

发布时间 2023-08-02 00:19:18作者: smiling&weeping

Smiling & Weeping

             ----我本想边走边爱,可你一个人就挡住了人山人海

 

牢骚:其实想明白了也就这么一回事,当时一直想dp,(# ̄~ ̄#)

正解:其实题目说的明明白白,任选一个数,然后他的左右相加,操作之后求出所剩最大的一个数,那么我们直接分odd,even直接求其最大值,就这么简单的没有朋友ε=(´ο`*)))唉,还有一个问题,题目虽然给的是10^9范围,但是还要开long long

题目链接:Problem - C - Codeforces

Talk is cheap

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int t , n;
 5 int main()
 6 {
 7     scanf("%d",&t);
 8     while(t--)
 9     {
10         ll ans = 0;
11         scanf("%d",&n);
12         vector<ll> num(n+10);
13         for(int i = 1; i <= n; i++)
14             scanf("%lld",&num[i]);
15         ll an1 = 0 , an2 = 0 , ank = num[1];
16         bool flag = false;
17         // 特判全部是负数的情况
18         for(int i = 1; i <= n; i++)
19         {
20             if(!flag && num[i] > 0)
21                 flag = true;
22             ank = max(ank , num[i]);
23         }
24         if(!flag)
25         {
26             printf("%lld\n",ank);
27             continue;
28         }
29         // 正常至少有一个自然数,分奇、偶讨论
30         for(int i = 1; i <= n; i++)
31         {
32             if((i&1) && num[i] > 0)
33                 an1 += num[i];
34             if((i+1)&1 && num[i] > 0)
35                 an2 += num[i];
36         }
37         ans = max(an1 , an2);
38         printf("%lld\n",ans);
39     }
40     return 0;
41 }

 文章到此结束,但我们还将继续前行