部分背包问题
#include<iostream> #include<algorithm> using namespace std; struct Node { int w, v; }a[110]; bool cmp(Node aa, Node bb) { return aa.v * bb.w > aa.w * bb.v; } signed main() { int n, m; cin >> n >> m; double ans = 0; for (int i = 1; i <= n; i++) { cin >> a[i].w >> a[i].v; } sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { if (a[i].w <= m) { ans += a[i].v, m -= a[i].w; } else { ans += a[i].v * m * 1.0 / (a[i].w * 1.0); break; } } printf("%.2lf", ans); return 0; }

浙公网安备 33010602011771号