排队打饭

排队打饭

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

一天中午,有N个学生来到食堂买饭,他们需要排成了一个一字队伍并按顺序打饭,现在已经知道了每个人买饭的时间,现在食堂的管理员希望知道他们按照怎样的顺序买饭能够使得所有人等待的时间总和最小(每个人等待的时间 = 排在他前面的人的打饭时间和+自己打饭的时间)。

输入

 输入的第一行包含一个整数T(T≤30)表示数据组数,每组数据包括两行,第一行为一个整数N表示人数,第二行为N个整数表示每个人买饭所需要的时间,所有整数均不超过100。

输出

 每组数据输出一行,包括一个整数,表示所有人等待时间总和的最小值。

示例输入

251 2 3 4 5545 10 48 37 9

示例输出

35334

提示

 

来源

 

示例程序

 
#include<stdio.h>    
int main()    
{    
    int i,j,n,m,k,t,a[101],b,c[101],l;    
    scanf("%d",&n);    
    for(l=0;l<n;l++)    
    {    
        scanf("%d",&m);    
        for(j=0;j<m;j++)    
            scanf("%d",&a[j]);    
        for(i=0;i<m-1;i++)    
        {    
            k=i;    
            for(j=i+1;j<m;j++)    
                if(a[k]>a[j])    
                    k=j;    
                if(k!=i)    
                {    
                    t=a[k];    
                    a[k]=a[i];    
                    a[i]=t;    
                }    
        }    
        t=0;    
        for(i=0;i<m;i++)    
        {    
            k=a[i];    
                if(i==0)    
                {    
                    t=k;    
                    c[i]=k;    
                }    
                else    
                {    
                    t+=k;    
                    c[i]=t;    
                }    
        }    
        b=0;    
        for(j=0;j<m;j++)    
            b+=c[j];    
    printf("%d\n",b);    
    }    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值