地址:http://acm.hdu.edu.cn/showproblem.php?pid=1678

题意:买3样东西,最便宜的那样可以被当做折扣而不用付钱。问n样东西最多能获得多少折扣?

mark:贪心,排序后从大到小3样3样地买。

代码:

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