免責事項:著者ジンの心、ジン・スペース住所:のhttp://blog.csdn.net/kenden23/。これは、著者の同意なしに複製することはできません。https://blog.csdn.net/kenden23/article/details/31418535
問題の説明
FatMouseは彼の好きな食べ物、JavaBeansを含む倉庫を守る猫と取引する準備ができて猫の餌のMポンドを準備しました。
倉庫には、Nの客室を提供しています。i番目の部屋は、JavaBeansのJ [i]はポンドが含まれており、キャットフードのF [i]のポンドが必要です。FatMouseはキャットフードの[i]は*%のポンド彼はFを支払った場合に代わりに、彼はのJavaBeansのJ [i]は*%のポンドを得ることができ、部屋の中のすべてのJavaBeansのために取引する必要はありません。ここでは実数です。今、彼はあなたに、この宿題を割り当てている。彼に彼が得ることができたJavaBeansの最大量を教えてください。
倉庫には、Nの客室を提供しています。i番目の部屋は、JavaBeansのJ [i]はポンドが含まれており、キャットフードのF [i]のポンドが必要です。FatMouseはキャットフードの[i]は*%のポンド彼はFを支払った場合に代わりに、彼はのJavaBeansのJ [i]は*%のポンドを得ることができ、部屋の中のすべてのJavaBeansのために取引する必要はありません。ここでは実数です。今、彼はあなたに、この宿題を割り当てている。彼に彼が得ることができたJavaBeansの最大量を教えてください。
入力
入力は複数のテストケースから構成されています。それぞれ[i]は、各テストケースは、2つの非負整数MとNを含む行から始まるN行は、次の各2つの非負整数を含むJ [i]とF。最後のテストケースは2つの-1年代が続いています。すべての整数は1000年より大きくありません。
出力
各テストケースのために、一列にFatMouseを得ることができるのJavaBeansの最大量は小数点第3位まで正確実数を印刷。
サンプル入力
5 3 7 2 3 4 5 2 20 3 25 18 24 15 15 10 -1 -1
サンプル出力
13.333 31.500
水の問題貪欲法、
:これは、個々の単語を理解することは困難である彼にのは、JavaBeansののJ [I]は*彼の%は、CATのIF F. [I] *食品A%ポンドを支払うポンド得ることができます
このような発現は、いくつかの部分を購入することができます。
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
struct twoInts
{
int j, f;
bool operator<(const twoInts two) const
{
double a = (double)j / (double)f;
double b = (double)two.j / (double)two.f;
return a > b;
}
};
int main()
{
int M, N;
while (scanf("%d %d", &M, &N) && -1 != M)
{
vector<twoInts> vt(N);
for (int i = 0; i < N; i++)
{
scanf("%d", &vt[i].j);
scanf("%d", &vt[i].f);
}
sort(vt.begin(), vt.end());
double maxBean = 0.0;
for (int i = 0; i < N; i++)
{
if (M >= vt[i].f)
{
maxBean += vt[i].j;
M -= vt[i].f;
}
else
{
maxBean += (double)vt[i].j * M / (double)vt[i].f;
break;
}
}
printf("%.3lf\n", maxBean);
}
return 0;
}