uva-410
题意:国际空间站在其实验室中包含许多离心机。每个离心机将具有一些(C)个腔室,每个腔室可包含0,1或2个样品。您将编写一个程序,将所有S样本分配给腔室,使得没有腔室包含超过2个样本,并且IMBALANCE的以下表达式被最小化。 (来自谷歌翻译)
每行数的和与c/s的差的绝对值就是imbalance.
题解:
若s为零,则imbalance为零,但输出格式仍然需要体现。若s<=c,说明可能某一行的可以不放置,故只需要一个放一行即可,(若一行放两个,imbalance将变大)。
若s>c,又有一些行必须放一个数字的话,放单个数字的地方必须是元素里面最大的那几个,否则将造成的大的数越大,小的数越小,imbalance的值也会越大。
思路是贪心,先排序,如果S<C 那么直接填,否则的话,先处理大的,将前2*C-S个大数占一个格子,剩下的几个,按两头取,例如:1 2 3 4 取 1,4和2,3分别填到格子里!
s==0时也要输出的格式
if (s == 0)
{
for (int i = 0; i < c; ++i)
{
ans += ave;
cout << ' ' << i << ":" << endl;
}
}