机房有很多机器,不同机器开机时间不同。已知开始站在1号机器,从一台机器走到另一台机器需要5秒,如何才能用最短的时间打开所有的机器。
标签:
Description
机房有很多机器,不同机器开机时间不同。已知开始站在1号机器,从一台机器走到另一台机器需要5秒,如何才能用最短的时间打开所有的机器。
Input
每组数据开头一个n表示机器数,接下来n个数表示1~n号机器所需开机时间,以秒为单位。0 < n <= 1000,开机时间为10~60秒。
Output
每组数据输出一行一个数,表示所有机器打开所需最短时间。
Sample Input
3 35 10 30
//欲哭无泪 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int a[1200]; int i,n,j; while(scanf("%d",&n)!=-1) { for(i=0;i<n;i++) scanf("%d",&a[i]); int max=*max_element(a,a+n); int ans=0; sort(a+1,a+n); for(i=n-1,j=1;i>=1;i--,j++) a[i]=a[i]+j*5; int max2=*max_element(a,a+n); ans+=max2; printf("%d\n",ans); } } /*贪心策略:第一台机器不移动,后面的机器按从大到小的顺序排序 开第一台机器的时间就是a[0],开第二台用时:a[1]+1*5,第三台:a[2]*2*5,以此类推,易证明到该策略的正确性 */
标签:
原文地址:http://www.cnblogs.com/orchidzjl/p/4323023.html