地址: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 }