题目大意:输入金钱数、大米的种类、各种大米的单价和体积(总公斤数),输出所能购买的大米的最大公斤数
解题思路:
1)先按单价排序。从小到大买。
2)这一道题与2111其实是差不多的。只不过前者是取价值最大的带走,现在是取价值最小的带走。
代码如下:
/*
* 2187_1.cpp
*
* Created on: 2013年8月10日
* Author: Administrator
*/
#include <iostream>
using namespace std;
struct Node{
int price;
int quality;
};
bool compare(const Node& a , const Node& b){
return a.price < b.price;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int V , n;
scanf("%d%d",&V,&n);
Node ns[n];
int i;
for( i = 0 ; i < n ; ++i){
scanf("%d%d",&ns[i].price,&ns[i].quality);
}
sort(ns,ns+n,compare);
double sum = 0;
for(i = 0 ;i < n && V>0;++i){
if(((double)V)/ns[i].price > ns[i].quality){
V -= ns[i].quality*ns[i].price;
sum += ns[i].quality;
}else{
sum += (double)V/ns[i].price;
V= 0;
}
}
printf("%.2lf\n",sum);
}
}