Sicily - 17958 - Algorithm Lectures 【找规律】

来源:互联网 发布:新手怎样做淘宝客 编辑:程序博客网 时间:2024/05/29 16:17
Algorithm Lectures
Time Limit: 1 secs, Memory Limit: 256 MB
Description

Ante and Goran are preparing N teams of young ambitious students for a student programming competition of students from University of Zagreb. Both of them have one algorithm they have to explain to each team. Of course, both can’t work with the same team at the same time and none of them can work with multiple teams simultaneously.

You are given the time it takes for each team to understand and implement an algorithm. Each algorithm lecture has to be done without interruption. Determine the minimal time required for Ante and Goran to do their lectures!

For additional explanation, consult the sample tests clarifications.

Input

The first line of input contains the integer N, the number of teams.

The following line contains N space separated integers, where the ith integer denotes the time required for the ith team to understand and implement an algorithm.

All numbers in the input will belong to the interval [1, 3 * 105].

Output

The first and only line of output must contain the required number from the task.

Sample Input
样例一:32 2 2样例二:34 1 2样例三:41 3 2 1
Sample Output
样例一:6样例二:8样例三:7
Hint

Clarification of the first example: Each team needs 2 units of time to understand and implement an algorithm. One of the possible schedules is that Ante gives his lectures to team 1, team 2 and team 3, respectively, and Goran to team 3, team 1 and team 2, respectively.

Clarification of the second example: One of the optimal schedules is that Ante gives lectures to team 2, team 3 and team 1, respectively, but with a pause lasting 1 unit of time between team 3 and team 1. Goran will give lectures to team 1, team 3 and team 2, respectively.

 

  分析:为了尽量分开教学、减少冲突,我们可以先将序列降序排序,然后Ante老师从左到右上课,Goran老师从时间第二长的课开始从左到右上课,最后一节课上时间最长的课。我们会发现如下规律:

  

#include <cstdio>#include <iostream>using namespace std;int main (){    int n, x, maxn = -1;    long long sum = 0, ans;    scanf("%d", &n);    for(int i=0; i<n; i++){        scanf("%d", &x);        sum += x;        if(maxn < x) {            maxn = x;        }    }    if(maxn <= sum - maxn)    ans = sum;    else    ans = 2*maxn;    printf("%lld\n", ans);        return 0;}

 

0 0
原创粉丝点击