地震災區急需糧食,給定經費 n 和 m 種大米,每種有單價 p 和總重量 h。大米可任意分割購買(分數背包),目標:在經費內買到最大總重量。
單價低的大米性價比最高。將所有大米按單價 p 升序排序,依次購買:若經費 ≥ 該米總價 (p×h),全買;否則用剩餘經費買盡可能多的重量 (n/p),結束。
struct Rice { int p, w; } r[1010];
bool cmp(Rice a, Rice b) { return a.p < b.p; } // 單價升序
sort(r, r+m, cmp);
double ans = 0;
for (int i = 0; i < m && n > 0; ++i) {
if (1.0 * r[i].p * r[i].w <= n) {
n -= r[i].p * r[i].w;
ans += r[i].w;
} else {
ans += 1.0 * n / r[i].p;
break;
}
}
printf("%.2lf\n", ans);