标签:
1009,又是一道水题,属于那一类看到题就能想到解决方案。思路很清晰,就是输入(M,N)和N个(J,F),对输入的(J,F)按照比值[可以理解为效益]降序排序,按照效益高低进行有序交易。
关键是如何对结构体进行排序,这里可以考虑用STL。
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct Trade
{
int j;
int f;
double rate;
};
Trade mouse[3001];
bool cmp(Trade a,Trade b)
{
return a.rate>b.rate;
}
int main()
{
int m,n;
//Trade *mice;
while(cin>>m>>n&&(m!=-1||n!=-1))
{
for(int i=0;i<n;i++)
{
//mice[i]=(mouse *)malloc(sizeof(mouse));
cin>>mouse[i].j>>mouse[i].f;
mouse[i].rate=(double)mouse[i].j/mouse[i].f;
//注:括号的范围会影响输出的结果
}
sort(mouse,mouse+n,cmp);
double sum=0;
for(int i=0;i<n;i++)
{
if(m>mouse[i].f)
{
m-=mouse[i].f;
sum+=mouse[i].j;
}
else
{
sum+=mouse[i].rate*m;
m=0;
break;
}
}
printf("%.3lf\n",sum);
}
//system("pause");
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u011000290/article/details/47376761