题目描述
有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2…………tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?
数据规模和约定
其中80%的数据保证n< =10
输入
第一行n,r (n< =500,r< =75)
第二行为n个人打水所用的时间Ti (Ti< =100);
输出
最少的花费时间
样例输入
3 2
1 2 3
样例输出
7
思路:这个问题,求的是最少花费的时间,等于接水的时间+等待的时间。接水的时间是固定的,我们要求最少的花费时间,只需要最小化等待时间就可以了,这样就变化为上一篇博客的题目打水问题
代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxx=1e3+100;
int a[maxx];
vector<int> p[maxx];
int n,m;
int main()
{
scanf("%d%d",&n,&m);
ll Sum=0;
for(int i=1;i<=n;i++) scanf("%d",&a[i]),Sum+=a[i];
sort(a+1,a+1+n);
int tx=0;
for(int i=1;i<=n;i++)
{
p[tx].push_back(a[i]);
tx=(tx+1)%m;
}
ll ans=0;
for(int i=0;i<m;i++)
{
if(p[i].size())
{
ll sum=0;
for(int j=0;j<p[i].size()-1;j++)
{
sum+=p[i][j];
ans+=sum;
}
}
}
cout<<ans+Sum<<endl;
return 0;
}
简单一变就变成了另外一道题目。
努力加油a啊,(o)/~