算法分析與設計之多處最優服務次序問題2
阿新 • • 發佈:2018-11-06
循環 sin bsp 一行 print include 對比 進行 ios
¢ 設有n個顧客同時等待一項服務,顧客i需要的服務時間為ti,1≤i≤n,共有s處可以提供此項服務。應如何安排n個顧客的服務次序才能使平均等待時間達到最小?平均等待時間是n個顧客等待服務時間的總和除以n。
¢ 給定的n個顧客需要的服務時間和s的值,編程計算最優服務次序。
¢ 輸入
第一行有2個正整數n和s,表示有n個顧客且有s處可以提供顧客需要的服務。接下來的1行中,有n個正整數,表示n個顧客需要的服務時間。
¢ 輸出
最小平均等待時間,輸出保留3位小數。
輸入樣例
10 2
56 12 1 99 1000 234 33 55 99 812
輸出樣例
336.00
#include <iostream> #include<algorithm> #include <cstring> #include <cstdio> using namespace std; int main() { int i,n,j,k,minx; int s; double t; int a[10005],b[1005]; while(cin>>n>>s) // 輸入顧客數量和可供等待的工位 { for(i=0; i<n; i++) cin>>a[i]; //輸入顧客使用時間數組 sort(a,a+n); //將數組從小到大排序 memset(b,0,sizeof(b)); // 將b中的數組初始化為0 for(i=0; i<n; i++) //遍歷顧客的等待時間 { minx=0x7fffffff; //定義一個非常大的數 k=0; // for(j=0; j<s; j++) //有幾個工位 進行幾次循環 { if(minx>b[j]) // 這個和上個小的進行對比 { minx=b[j]; //記錄小的 k=j; //記錄小的對應的工位 } } b[k]+=a[i]; // b[k] = b[k] + a[i] 記錄每個工位的總時間 a[i]=b[k]; // 把每個工位的時間賦給對應顧客 形成 顧客總時間數組 } t=0; for(i=0; i<n; i++) // 計算顧客平均等待時間 t+=a[i]; t/=n; printf("%d\n",(int)(t)); } return 0; }
算法分析與設計之多處最優服務次序問題2