hdu 1009 贪心算法
博主英语不好,看懂个大概,老鼠有M磅猫食。有N个房间,每个房间前有一只猫,房间里有老鼠最喜欢的食品JavaBean,J[i]。若要引开猫,必须付出相应的猫食F[i]。
当然这只老鼠没必要每次都付出所有的F[i]。若它付出F[i]的a%,则得到J[i]的a%。求老鼠能吃到的做多的JavaBean。
解题思路:
J[i]/F[i]的比例越大,在这个房间,小鼠付出得到的收获最有价值。于是我们将设置结构体,
结构体里J[i]/F[i]。然后对结构体数组进行排序。依次按比例排序的付出猫食,即可。
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
struct z
{
	double j;
	int f;
	double t ;
};
bool cmp(z a, z b)
{
	return a.t > b.t;
}
int main()
{
	int m, n;
	double s;
	while (cin >> m >> n)
	{
		s = 0;
		if (m == -1 && n == -1)
		{
			break;
		}
		z *a = new z[n];
		for (int i = 0; i < n; i++)
		{
			cin >> a[i].j >> a[i].f;
			a[i].t = a[i].j / a[i].f;
		}
		sort(a, a + n, cmp);
		for (int i = 0; i < n; i++)
		{
			if (m>a[i].f)
			{
				m -= a[i].f;
				s += a[i].j;
			}
			else{
				s += (double)m / a[i].f*a[i].j;
				break;
			}
		}
		cout.setf(ios::fixed);//用定点格式显示浮点数;
	cout << setprecision(3) << s << endl;
	}
	return 0;
}
                    
                
                
            
        
浙公网安备 33010602011771号