版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiaojun1234567/article/details/23036335
题目链接:FatMouse' Trade
题目大意:有一只老鼠想和猫换取自己喜欢吃的食物(javabeans)它自己拥有的猫食m,问最多能得到多少javabeans?地道的贪心,注意贪心的策略是尽可能的拿更少的猫食物换取更多的javabeans。
AC代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
struct T
{
double javabean;
double Fatfood;
double max;
}trade[1002];
bool cmp(T a,T b)
{
return a.max>b.max;
}
int main()
{
double m;
int n;
while(cin>>m>>n)
{
if(m==-1 && n==-1)
break;
for(int i=0;i<n;i++)
{
cin>>trade[i].javabean>>trade[i].Fatfood;
trade[i].max=trade[i].javabean/trade[i].Fatfood;
}
sort(trade,trade+n,cmp);//按照单位猫食得到的最大javabean进行排序(从大到小)
double sum=0;
for(int i=0;i<n;i++)
{
if(trade[i].Fatfood<=m)
{
sum+=trade[i].javabean;
m-=trade[i].Fatfood;
}
else
{
sum+=m*trade[i].max;
break;
}
}
printf("%.3f\n",sum);
}
return 0;
}