19 排队打水问题
作者: Turbo时间限制: 1S章节: 其它
问题描述 :
有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2…………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?
输入说明 :
第一行n,r (n<=500,r<=75)
第二行为n个人打水所用的时间Ti (Ti<=100);
输出说明 :
最少的花费时间
输入范例 :
3 2
1 2 3
输出范例 :
7
#include<stdio.h>
void bubble_sort(int a[],int n);
int main(){
int n,m,i,sum=0;
int a[500]={0},b[500]={0};
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
bubble_sort(a,n);
//第一轮打水
for(i=0;i<m;i++)b[i]=a[i];
//总时间=等待时间+打水时间
for(i=m;i<n;i++)b[i]=b[i-m]+a[i];
for(i=0;i<n;i++)sum+=b[i];
printf("%d\n",sum);
return 0;
}
//bubble sort asc
void bubble_sort(int a[],int n){
int temp,flag=0;
for(int i=0;i<n-1;i++){
for(int j=n-1;j>i;j--){
if(a[j]<a[j-1]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
flag=1;
}
}
if(flag==0){
break;
}
}
}