排队打水问题

简介: 排队打水问题Time Limit:1000MS Memory Limit:65536KDescription有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………..tn为整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?Input第一行n,r (n

排队打水问题
Time Limit:1000MS Memory Limit:65536K

Description

有n个人排队到r个水龙头去打水,他们装满水桶的时间t1、t2………..tn为
整数且各不相等,应如何安排他们的打水顺序才能使他们总共花费的时间最少?

Input

第一行n,r (n<=500,r<=75)
第二行为n个人打水所用的时间Ti (Ti<=100);

Output

最少的花费时间

Sample Input

3 2
1 2 3

Sample Output

7

解题思路:
//思路:用贪心算法,每次让用时最少的r个人分别去r个水龙头去打水
//总时间=每个人的打水时间+等待时间

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 #define MAXNUM 500
 5 
 6 int cmp(const void *a, const void * b)  
 7 {  
 8     return *(int *)a - *(int *)b;  
 9 }
10 int main()  
11 {  
12     int n, r, i, sum=0;
13     int a[MAXNUM],b[MAXNUM];  
14     scanf("%d%d",&n,&r);  
15     for(i=0;i<n;i++)  
16     {
17         scanf("%d",&a[i]);  
18     }
19     qsort(a,n,sizeof(int),cmp);  
20     
21     for(i=0;i<r;i++)  
22     {
23         b[i]=a[i];  
24     }
25     for(i=r;i<n;i++)  
26     {
27         b[i]=b[i-r]+a[i];
28     }
29     
30     for(i=0;i<n;i++)  
31     {
32         sum+=b[i];  
33     }
34     printf("%d\n",sum);
35     return 0;  
36 }  

 

算法二:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 #define MAXNUM 500
 5 
 6 int cmp(const void *a, const void * b)  
 7 {  
 8     return *(int *)a - *(int *)b;  
 9 }
10 int main()  
11 {  
12     int n,r,i,j,minSum;
13     int a[MAXNUM]={0},b[MAXNUM]={0};  
14     scanf("%d%d",&n,&r);  
15     for(i=0;i<n;i++)  
16     {
17         scanf("%d",&a[i]);  
18     }
19     qsort(a,n,sizeof(int),cmp);  
20     
21     j=0;
22     minSum=0;
23     for(i=0;i<n;i++)  
24     {
25         b[j]+=a[i];
26         minSum=minSum+b[j]; 
27         j++;
28         if(j==r) j=0;
29     }
30     printf("%d\n",minSum);
31     return 0;  
32 }  

 

相关文章
|
7月前
看病要排队——HDU1873
看病要排队——HDU1873
|
人工智能 图形学
UnityAI——排队过窄洞
UnityAI——排队过窄洞
UnityAI——排队过窄洞
|
人工智能 算法
【贪心算法】排队打水
【贪心算法】排队打水
161 0
|
C语言
【每日一道智力题】之 轮流取石子(简单的尼姆博弈)
【每日一道智力题】之 轮流取石子(简单的尼姆博弈)
238 0
|
机器学习/深度学习 C语言 决策智能
【每日一道智力题】之 轮流取石子(尼姆博弈的详解)
【每日一道智力题】之 轮流取石子(尼姆博弈的详解)
492 0
|
算法 调度
调度算法 | 先来先服务(超市排队结账模型)
在操作系统中,如何去衡量性能?我们先简化模型,只用一个性能指标去衡量——周转时间,周转时间的定义是任务完成时间减去任务到达系统的时间
176 0
|
机器学习/深度学习 存储 算法
排队打水算法实现
排队打水算法实现
小白鼠排队
小白鼠排队
159 0