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;
}


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