Problem Description:
N个人要打水,有M个水龙头,第i个人打水所需时间为Ti,请安排一个合理的方案使得所有人的等待时间之和尽量小。
Input:
第一行两个正整数N M 接下来一行N个正整数Ti。
N,M< =1000,Ti< =1000
Output:
最小的等待时间之和。(不需要输出具体的安排方案)
Sample Input:
7 3
3 6 1 4 2 5 7
Sample Output:
11
程序代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int n,m,a[1001],book[1001]; scanf("%d %d",&n,&m); memset(book,0,sizeof(book));//数组初始化 for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n);//C++中的排序 int sum=0,num,c,d; for(int i=1;i<=n;i++) { num=0; c=0; d=i; while(1) { if(book[d]==1) break; else book[d]=1; if(d+m<=n) { c+=a[d];//加上前一个人的时间 num+=c;//每个水龙头总的 d+=m;//改变水龙头位置 } else break; } sum+=num;//所有水龙头时间总和 } printf("%d\n",sum); return 0; }