有N个人排队到M个水龙头去打水,他们装满水桶的时间Tl, T2,…,Tn为整数且各不相等,如何安排他们的打水顺
序才能使他们花费的总时间最少?
序才能使他们花费的总时间最少?
Input
第1行: 两个整数n和m, n表示人的个数,m表示水龙头的个数;
第2行, n个数,分别表示n个人装水的时间;
数据范围:m≤n/3, n≤ 1000, t<3000。
第2行, n个数,分别表示n个人装水的时间;
数据范围:m≤n/3, n≤ 1000, t<3000。
Output
一个整数,表示总花费的最少时间。
Sample Input
6 2
5 4 6 2 1 7
Sample Output
40
sol:排队打水的一个变形,贪心策略仍然是按打水时间排序,用时少的先打水,1~m个人第一轮打水,第m+1个人又到第一个水龙头打水,依次分配,计算出总用时。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int n,m,i,sum=0; 7 int a[1001],b[1001]; 8 scanf("%d%d",&n,&m); 9 for(i=1;i<=n;i++) 10 scanf("%d",&a[i]); 11 sort(a+1,a+n+1); 12 for(i=1;i<=m;i++) 13 b[i]=a[i]; 14 for(i=m;i<=n;i++) 15 b[i]=b[i-m]+a[i]; 16 for(i=1;i<=n;i++) 17 sum+=b[i]; 18 printf("%d",sum); 19 }