zoukankan      html  css  js  c++  java
  • 排队打水2

    有N个人排队到M个水龙头去打水,他们装满水桶的时间Tl, T2,…,Tn为整数且各不相等,如何安排他们的打水顺
    序才能使他们花费的总时间最少?

    Input

    第1行: 两个整数n和m, n表示人的个数,m表示水龙头的个数;
    第2行, n个数,分别表示n个人装水的时间;
    数据范围:m≤n/3, n≤ 1000, t<3000。

    Output

    一个整数,表示总花费的最少时间。

    Sample Input

    6 2
    5 4 6 2 1 7

    Sample Output

    40

    sol:排队打水的一个变形,贪心策略仍然是按打水时间排序,用时少的先打水,1~m个人第一轮打水,第m+1个人又到第一个水龙头打水,依次分配,计算出总用时。
     1 #include<cstdio>
     2 #include<algorithm>    
     3 using namespace std;
     4 int main()  
     5 {  
     6     int n,m,i,sum=0;  
     7     int a[1001],b[1001];  
     8     scanf("%d%d",&n,&m);  
     9     for(i=1;i<=n;i++)  
    10         scanf("%d",&a[i]);  
    11     sort(a+1,a+n+1);  
    12     for(i=1;i<=m;i++)    
    13         b[i]=a[i];  
    14     for(i=m;i<=n;i++)  
    15         b[i]=b[i-m]+a[i];  
    16     for(i=1;i<=n;i++)   
    17         sum+=b[i];  
    18     printf("%d",sum);    
    19 }  
     
  • 相关阅读:
    线性表ADT实现
    基数排序
    二叉树之已知前序和中序遍历求后序遍历(POJ2255 &&HDU )
    acm头文件
    快排
    快读
    二分
    数据结构大师
    AC_2. 01背包问题
    AC_94. 递归实现排列型枚举
  • 原文地址:https://www.cnblogs.com/cutepota/p/12134109.html
Copyright © 2011-2022 走看看