`
linest
  • 浏览: 150040 次
  • 性别: Icon_minigender_1
  • 来自: 内蒙古
社区版块
存档分类
最新评论

ZOJ-2109 贪心

    博客分类:
  • acm
 
阅读更多
2109:每个房间有一只猫看守javabean。 每只猫需要的猫粮和守卫的javabean数目不等。现在有一定数量猫粮,求最多能换出多少javabean.

思路:贪心。总是选最少猫粮换最多javabean的房间,即效率最高的那个。
#include<iostream>
using namespace std;
#include<stdio.h>
#include<algorithm>
#include<vector>

struct Room
{
	int javabean;
	int food;
	double weight;
};

bool compare(Room a,Room b)
{
	return a.weight > b.weight;
}

int main ()
{
	vector<Room> v;
	int m;
	int n;
	double sum;

	while(1)
	{
		cin>>m;
		cin>>n;
		sum=0;
		v.clear();
		if(m==-1&&n==-1)
			break;

		while(n--)
		{
			Room r;
			cin>>r.javabean;
			cin>>r.food;
			r.weight=(double)r.javabean/r.food;
			v.push_back(r);
		}

		sort(v.begin(),v.end(),compare);

		for(int i=0;i<v.size();i++)
		{
			if(m>v[i].food)
			{
				sum += v[i].javabean;
				m -= v[i].food;
			}
			else
			{
				sum += (double)m*v[i].javabean/v[i].food;
				break;
			}
		}
		printf("%.3f\n",sum);
	}
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics