很简单的一道题目,,主要是因为题目中的那个最后一句话,价值和重量成正比,
所以,才得根据比值来排序的..
而且好像不能重载符号,,,
诶
贴出代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int maxn = 11111;
int n;
struct node
{
int w;
int v;
}t[maxn];
bool cmp(const node &a, const node &b)
{
return (a.v * 1.0 / a.w) > (b.v * 1.0 /b.w);
}
void Print()
{
for (int i = 0; i < n; i++)
{
printf("w = %d v = %d", t[i].w, t[i].v);
cout << endl;
}
}
int main()
{
int c;
while (scanf("%d%d", &n, &c) != EOF && n != 0)
{
for (int i = 0; i < n; i++)
{
scanf("%d", &t[i].w);
}
for (int i = 0; i < n; i++)
{
scanf("%d", &t[i].v);
}
sort(t, t + n, cmp);
// Print();
double w = 0;
for (int i = 0; i < n; i++)
{
if (t[i].w <= c)
{
c = c - t[i].w;
w += t[i].v;
// cout << "c = " << c << endl;
// cout << "w = " << w << endl;
}
else
{
w += c * (t[i].w * 1.0 / t[i].v);
// cout << "w = " << w << endl;
break;
}
}
printf("%lf\n", w);
}
system("pause");
return 0;
}