在每年的淘宝“双十一”时,访问量都会暴涨,服务器的请求会被流量分配程序按照一定策略,分发给不同的进程去处理。有一类请求,有两个进程可以接受分发的请求,其中一个进程所在服务器的配置、网络传输性能等都要优于另一个进程。流量分发程序可以知道队列中每个任务的预计处理时间,每次都会尽可能将队列中预计处理时间更多的任务分配给性能更优的进程。

假设队列当前一共有 n 个任务待分配,第 i 个任务的预计处理时间为a​i​​(1≤i≤n)。由于服务存在冷启动问题,越靠后的进程,预计处理时间越短。而队列中的 最后一个任务 因为比较特殊,预计处理时间和之前的任务 无关。即前n−1 个任务的预计处理时间满足 a​1​​>a​2​​>...>a​n−1​​。现在要从中选出一个任务列表,不能有任何两个任务在原队列中相邻。计算选出的任务队列预计处理时间之和的最大值。

输入格式

输入第一行有一个整数 n(1≤n≤10​4​​),表示任务总数。

输入第二行有 n个整数 a​i​​(0≤ai​​≤104​​),表示每个任务的预计处理时间。

输出格式

输出一个整数,表示选出的任务的预计处理时间之和的最大值。

样例输入1

5
4 3 2 1 5

样例输出1

11

样例输入2

4
5 3 1 9

样例输出2

14

提示信息

对于第一组样例,选出的总预计处理时间最大为 4+2+5=11。

对于第二组样例,选出的总预计处理时间最大为 5+9=14。

首先对于整个数组(不包括最后一个数),偶数长度的话,就是奇数位相加的和+最后一个数,奇数长度的话,考虑数组最后一个数和最后一个数的大小关系。

 #include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int n;
int m;
int a[];
int sum=;
cin>>n;
for(int i=;i<=n-;i++)
{
cin>>a[i];
}
cin>>m;
if(n&)
{
for(int i=;i<=n-;i+=)
{
sum+=a[i];
}
sum+=m;
}
else
{
for(int i=;i<=n-;i+=)
{
sum+=a[i];
}
// cout<<sum<<endl;
sum+=max(a[n-],m);
}
cout<<sum<<endl;
return ;
}

最新文章

  1. [PHP] - Laravel 5 的 Hello Wold
  2. PHP如何将中文转换为拼音
  3. 动画效果 View控件的显示和隐藏效果
  4. (C# Binary Tree) 基本概念和算法
  5. C语言范例学习01
  6. HTTP协议详解(经典)
  7. Hadoop学习3--安装ssh服务
  8. JQuery.tmpl()的用法
  9. JAVA入门第二季(mooc-笔记)
  10. 缓存 Cache
  11. HDOJ 题目分类
  12. JAVA高级总结
  13. Hadoop 2.6.0 完全分布式平台搭建
  14. monkey自定义脚本实践
  15. Unity安卓打包遇到的问题。
  16. VUE组件汇总
  17. JavaSE学习总结(十九)—— Java Web 综合应用(JSP、Servlet、IDEA、MySQL、JUnit、AJAX、JSON)
  18. Scrapy爬虫笔记 - 爬取知乎
  19. centos7 下载安装tomcat9
  20. centos 7.2 安装mysql 修改 初始密码

热门文章

  1. 定位程序问题出现的原因工具-jstack
  2. 经典的CSS代码(转)
  3. 机器人自主移动的秘密:SLAM与路径规划有什么关系?(三)
  4. 树莓派研究笔记(5)-- FM网络收音机
  5. MODI中的OCR模块
  6. oracle connect by 递归,反递归,自动补全查询实现
  7. Java 在本地开发环境部署多个 spring 项目
  8. ASP.NET Core 部署到Cont OS 服务器
  9. Java开发环境的搭建-JDK的安装
  10. UINavigationController + UIScrollView组合,视图尺寸的设置探秘(一)