1. 程式人生 > >C/C++ 演算法分析與設計:貪心(排隊接水)

C/C++ 演算法分析與設計:貪心(排隊接水)

題目描述

N個人同時提水到一個水龍頭前提水因為大家的水桶大小不一,所以水龍頭注滿第i(i=1,2,3......N)個人所需要的時間是T(i) 編寫一個程式,對這N個人使他們花費的時間總和最小,並求出這個時間。

例如有三個人a,b,c,用時分別是2,1,3 排隊順序為c,b,a的時候,c要等待3,b要等待4,c要等待6,總和為3+4+6=13 排隊順序為a,b,c的時候,a要等待2,b要等待3,c要等待6,總和為2+3+6=11 11更小,要找出這樣的最小值。

輸入

一組測試資料的個數n 分別輸入這n個測試資料。

輸出

排隊所花費的最少時間和。

樣例輸入

3
2 1 3

樣例輸出

10
#include<iostream>
#include<set>
using namespace std;
int main()
{
	int n,m,i,s=0,t=0;
	multiset<int> set1;
	multiset<int>::iterator it;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&m);
		set1.insert(m);
	}
	for(it=set1.begin();it!=set1.end();it++)
	{
		t+=*it;
		s+=t;
	}
	printf("%d\n",s);
}