这道题使用贪心法,为了得到最多的javabean,需要从价格最便宜的开始买,直到所有的food都用完。
#include <stdio.h> #include <stdlib.h> #include <math.h> struct sg{ double javabean; double foodcat; double price; }; struct sg input[1005]; int cmp(const void *a, const void *b) { return (*(struct sg *)a).price > (*(struct sg *)b).price ? 1 : -1; } int main(void) { int i; int M, N; double sum; double sur; while(scanf("%d%d", &M, &N) && (M != -1 && N != -1)) { for(i = 0; i < N; i++) { scanf("%lf%lf", &input[i].javabean, &input[i].foodcat); input[i].price = (input[i].foodcat) / input[i].javabean; } sum = 0; sur = M; qsort(input, N, sizeof(struct sg), cmp); for(i = 0; i < N; i++) { double tmp = input[i].foodcat; if(tmp < sur && sur > 0) { sum += input[i].javabean; sur -= input[i].foodcat; } else if(sur > 0) { sum += (sur / input[i].foodcat * input[i].javabean); sur = 0.0; break; } } printf("%0.3lf\n", sum); } return 0; }
时间: 2024-11-01 22:53:09