悼念512汶川大地震遇难同胞——老人是真饿了
题目分析
每组数据给出所拥有的钱数,和大米的种类。每种大米给出单价(每单位重量)和大米的重量。求能买到的大米最大重量是多少?
采用贪心算法。
既然是重量最大,那么就按照每种大米的单价排序,有限购买单价小的,买完小的买大的即可。
代码总览
/*
Title:HDOJ.2187
Author:pengwill
Date:2016-11-25
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct rice{
int price;
int weight;
int total;
}item[1005];
bool cmp(rice a,rice b)
{
return a.price<b.price;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int money,n;
scanf("%d %d",&money,&n);
int i;
for(i = 0;i<n;i++){
scanf("%d %d",&item[i].price,&item[i].weight);
item[i].total = item[i].price * item[i].weight;
}
sort(item,item+n,cmp);
double ret = 0;
for(i = 0;i<n;i++){
if(money> item[i].total){
ret += item[i].weight;
money-=item[i].total;
}else{
ret += 1.0 * money / item[i].price;
break;
}
}
printf("%.2f
",ret);
}
return 0;
}