1120: 排队打水问题

题目描述 算法提高 排队打水问题
时间限制:1.0s 内存限制:256.0MB

问题描述

有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………..tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少? 输入格式   第一行n,r (n< =500,r< =75)   第二行为n个人打水所用的时间Ti (Ti< =100); 输出格式   最少的花费时间

样例输入
3  2
1  2  3
样例输出
7
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
//装满时间最少的最先排,总时间sum等于a[i]+d(等待时间)
int main()
{
  int n,r;
  while(cin>>n>>r){
    int a[n];//n个人的装水时间
    int d[r];//等待时间
    int sum=0;//总共时间
    for (int i = 0; i < n; ++i)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    memset(d,0,sizeof(d));

    for (int i = 0; i < n; ++i)
    {
        sort(d,d+r);
        sum += d[0]+a[i];
        d[0]+=a[i];
    }
    cout<<sum<<endl;
  }
  return 0;
}