多处最优服务次序问题——贪心算法
【问题描述】
设有 n 个顾客同时等待一项服务。顾客 i 需要的服务时间为 ti(1≤i≤n)。共有 s 处可以提供此服务。应如何安排 n 个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是 n 个顾客的等待时间(含服务时间)总和除以n。
编程任务:对于给定的 n 个顾客需要的服务时间和 s 的值,编程计算最优服务次序。
package SF;
import java.util.Scanner;
import java.util.Arrays;
class Wait{
int n;
int s;
int wait[];
public Wait(int n,int s,int wait[]){
this.n=n;
this.s=s;
this.wait=wait;
}
public double waitMin(){
double total=0D;
Arrays.sort(wait,1,n); //排序
int loop=0;
if( n/s!= ((double)n)/((double)s) ){
loop=n/s;
}else{
loop=n/s-1;
}
for(int i=1;i<=loop*s;i++){
total+=wait[i];
}
return total;
}
}
public class minWait {
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
int n=reader.nextInt(); //等待人数
int s=reader.nextInt(); //服务处数
int wait[]=new int[n+1];
for(int i=1;i<=n;i++){
wait[i]=reader.nextInt();
}
Wait wa=new Wait(n,s,wait);
System.out.print(wa.waitMin()/n);
}
}
运行截图: