
解析:
显然可以发现,翻转数量为奇数是不影响结果,所以需要反转偶数个连续数字。
考虑贪心,我们每次反转相邻的两个数字,并且累计贡献,如果贡献为0则清空继续累计,并且每次取贡献最大值即可。
- #include
- using namespace std;
- #define int long long
- const int N=2e5+5;
- int t,n,a[N];
- signed main(){
- scanf("%lld",&t);
- while(t--){
- scanf("%lld",&n);
- int sum=0;
- for(int i=1;i<=n;i++){
- scanf("%lld",&a[i]);
- if(i%2) sum+=a[i];
- }
- int p=0,q=0,res=0;
- for(int i=1;i<=n;i++){
- if(i%2&&i
- if(p<0) p=0;
- p+=a[i+1],p-=a[i];
- }
- else if(i%2==0&&i
- if(q<0) q=0;
- q+=a[i],q-=a[i+1];
- }
- res=max(res,max(p,q));
- }
- printf("%lld\n\n",sum+res);
- }
- return 0;
- }
-
相关阅读:
无代码开发添加数据入门教程
小白必看!企业开源知识库管理系统优势和选择
java计算机毕业设计汇美食电子商城MyBatis+系统+LW文档+源码+调试部署
【译】使用.NET将WebAssembly扩展到云(一)
UWB NI框架嵌入式实现——Qorvo示例
内存管理(四)——虚拟内存
【python】文件操作
实验二.常用网络命令
深度解析shell脚本的命令的原理之rm
SQL server查询08-20点的时间段时间
-
原文地址:https://blog.csdn.net/JungleZRD/article/details/133957334