题目描述
有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2…………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?
数据规模和约定
其中80%的数据保证n< =10
输入
第一行n,r (n< =500,r< =75)
第二行为n个人打水所用的时间Ti (Ti< =100);
输出
最少的花费时间
样例输入
3 2
1 2 3
样例输出
7
总共的时间可以分为每个人打水的时间之和和每个人的等待时间之和,由于每个人的等待时间不是很好直接算出来,我们需要用一个vector存一下每个水龙头上接水人员的信息。这样就能算了
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N];
vector<int>vec[N];
int main()
{
int n,m;
cin>>n>>m;
long long sum=0;
int tx=0;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
{
sum+=a[i];
vec[tx].push_back(a[i]);
tx=(tx+1)%m;
}
long long ans=0;
for(int i=0;i<m;i++)
{
long long ss=0;
if(vec[i].size())
{
for(int j=0;j<vec[i].size()-1;j++)
{
ss+=vec[i][j];
ans+=ss;
}
}
}
cout<<ans+sum<<endl;
}