干饭1

题目描述:
干饭人干饭魂干饭人吃饭得用盆。干饭人有精神吃饱了都进不去门。
每天中午下课,食堂里就会挤满各种各样的干饭人。已知学院食堂里有t个打饭窗口,有n个人排队到去打饭,他们打饭时间t1、t2…………tn为整数且各不相等,应如何安排他们的顺序才能使他们总共花费的时间最少?

输入:
第一行为两个整数,n和t ,用空格隔开,(n< =500t< =75)
第二行为n个人打饭所用的时间Ti (Ti< =100);

输出:
最少的花费时间

样例输入
3 2
1 2 3

样例输出:
7

样例示意图:
在这里插入图片描述
题目思路:
不要把这题想得太复杂,就是日常生活中如何安排排队,使得花费的总时间最少。由题意易知,把时间花费少的人排在前面,后面的人等待时间就少,因此只要先将n个人的打饭时间升序排序,然后一排一排排列即可。

参考代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX1 501
#define MAX2 76

int n,t;
int a[MAX1];
int b[MAX2];

int cmp(const void *a,const void *b)
{
    
    
	int* pa=(int*)a;
	int* pb=(int*)b;
	int num1=*pa;
	int num2=*pb;
	return num1-num2;
}

int main()
{
    
    
	int i,sum=0;
	scanf("%d%d",&n,&t);
	
	for(i=0;i<n;i++)
	 scanf("%d",&a[i]);
	
	qsort(a,n,sizeof(a[0]),cmp);
    
    for(i=0;i<n;i++)
    {
    
    
    	b[i%t]+=a[i];
    	sum+=b[i%t];
	}
	
	printf("%d",sum);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/qq_46139801/article/details/114385073
1-1
2-1