HDU - 2187 悼念512汶川大地震遇难同胞——老人是真饿了(贪心入门基础)

HDU - 2187 悼念512汶川大地震遇难同胞——老人是真饿了

(省去好多与代码无关的语言描述)
对于幸存的灾民来说,最急待解决的显然是温饱问题,救灾部队一边在组织人员全力打通交通,一边在组织采购粮食。现在假设下拨了一定数量的救灾经费要去市场采购大米(散装)。如果市场有m种大米,各种大米的单价和重量已知,请问,为了满足更多灾民的需求,最多能采购多少重量的大米呢?
Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0 Output
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。

思路:最多能采购多少重量的大米,买最便宜的大米就是最好的,对每种大米按照单价进行升序排序,然后遍历买米。

#include
#include
#include
using namespace std;
struct node{
	double pi,mi;//danjia  zhonfliang
}a[1001];
bool cmp(node a,node b){
	return a.pi<b.pi;
}
int main(){
	int C;
	double n;
	int m;
	cin>>C;
	while(C--){
		cin>>n>>m;
		for(int i=0;i<m;i++){
			cin>>a[i].pi>>a[i].mi;
		}
		sort(a,a+m,cmp);//排序
		double sum=0;
		for(int i=0;i<m;i++){
			if(n>a[i].pi*a[i].mi){
				n-=a[i].pi*a[i].mi;
				sum+=a[i].mi;//全部买完
			}else{
				sum+=n/a[i].pi;//用最后的前能买多少买多少
				break;//前已经花完了
			}
		}cout<<fixed<<setprecision(2)<<sum<<endl; 
	}
	return 0;
}

你可能感兴趣的:(贪心)