POJ 4110 圣诞老人的礼物

贪心水题,性价比最高的方式是先选择单位价值最大的糖果,如果超量,就放一部分,不超量就继续放次单位价值大的糖果。

#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

struct mem {
	int v,w;
	double density;
};

mem box[110];
int n,w;
double  totv,totw;

bool cmp(const mem &a,const mem &b)     //根据糖果的单位价值进行从大到小排序
{
	return a.density>b.density;
}

int main()
{
	cin>>n>>w;
	for(int i=0;i<n;i++) {
		cin>>box[i].v>>box[i].w;
		box[i].density=1.0*box[i].v/box[i].w;
	}
	sort(box,box+n,cmp);
	totv=totw=0;
	
	for(int i=0;i<n;i++) {      	//从单位价值大到小的顺序放糖果
		if(totw+box[i].w<=w){       //判断糖果重量是否超标
			totw+=box[i].w;
			totv+=box[i].v;
		}else{
			totv+=box[i].density*(w-totw);
			totw=w;
			break;
		}
	}
	printf("%.1f\n",totv);      //注意输出要求,保留一位小数
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章