5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
13.333 31.500
一道经典的贪心入门题
LCY老师算法课的一道例题
题意是一只老鼠准备了N磅的猫粮用来贿赂守门的猫 ,在第i间房子里有j【i】磅的咖啡豆,看门猫要F【i】磅的猫粮。
如果老鼠付出F[i]* a% 磅猫粮他能得到 J[i]* a%磅的咖啡豆
求最大可获咖啡豆质量
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int j[1005] , f[1005] ;
double p [1005];
int main()
{
int m , n , i , t ;
double sum , max;
while(cin >> m >> n)
{
if(m == -1&& n == -1)break;
for ( i = 0 ; i < n ;i++)
{
cin >> j[i] >> f[i] ;
p [i] = (double)j[i] / f[i] ;
}
sum = 0;
while(m != 0 && n != 0)//从最大的p开始取
{
max = p[0];
t = 0;
for( i = 1 ; i < n ; i++)
{
if(max < p [i])
{
max = p[i] ;
t =i ;
}
}
if( m >= f[t])//每一步都尽可能取完
{
m -=f[t];
sum +=j[t];
p[t] = 0;
}
else
{
sum += (double)m * j [t] / f[t];
m = 0;
}
}
//cout << sum << endl;
printf("%.3lf\n", sum);
}
return 0;
}
这题水题没啥意思