Descripción del problema
Se acerca la Navidad, Santa Claus listo para distribuir caramelos, ahora cómo los diferentes caja de dulces, caja de dulces tiene su propio valor y el peso, cada caja de dulces se puede dividir en cualquier composición mayor distancia. trineo de renos de Santa Claus sólo puede aguantar bajo el peso W de dulces, Santa Claus puede tomar hasta preguntar cuánto el valor de los dulces.
entrada
La primera línea se compone de dos partes, respectivamente un número entero positivo cajas número de confitería N (1 <= n <= 100), reno puede soportar el peso máximo número entero positivo w (0 <w <10.000), los dos números separados por un espacio abierta. N restantes líneas que corresponden cada una a una caja de bombones, consta de dos partes, a saber, un valor de un cuadro de número entero positivo de caramelo en peso enteros positivos y v w, separadas por un espacio
exportación
Santa Claus puede tomar la salida máxima del valor total de los caramelos, reservado un decimal
. De salida como una línea, terminada por una nueva línea.
entrada de la muestra
4 15
100 4
412 8
266 7
591 2
Ejemplo de salida
1193.0
La resolución de problemas ideas de
acuerdo con el Liverpool 价值/重量
proporción decreciente de seleccionar el regalo es elegir el más rentable de Liverpool hasta que la masa total w
#include<iostream>
#include<algorithm>
using namespace std;
const double eps = 1e-6;
struct Candy {
int v; int w;
bool operator <(const Candy& c) const
{
return double(v) / w - double(c.v) / c.w > eps;
}
} candies[110];
int main() {
int n, w;
cin >> n >> w;
for (int i = 0; i < n; ++i)
cin >> candies[i].v >> candies[i].w;
sort(candies, candies + n);
int totalW = 0;
double totalV = 0;
for (int i = 0; i < n; ++i) {
if (totalW + candies[i].w <= w) {
totalW += candies[i].w;
totalV += candies[i].v;
}
else {
totalV += candies[i].v *
double(w - totalW) / candies[i].w;
break;
}
}
printf("%.1f", totalV);
return 0;
}