HDOJ 1009 FatMouse' Trade
第一个使用贪心算法做的ACM题目O(∩_∩)O哈哈~。将兑换比从大到小排序,然后兑换直至完成,输出结果即可

1 #include<stdio.h>
2 #include <memory.h>
3 #include<stdlib.h>
4 struct Exchange{
5 int room;
6 int javabean;
7 };
8 int cmp( const void *a , const void *b )
9 {
10 struct Exchange *c = (Exchange *)a;
11 struct Exchange *d = (Exchange *)b;
12 if (d->room*1.0/d->javabean > c->room*1.0/c->javabean)
13 return 1;
14 else if (d->room*1.0/d->javabean < c->room*1.0/c->javabean)
15 return -1;
16 else return 0;
17 }
18 double summation(Exchange* ex,int len,int javabeans)
19 {
20 double sum=0;
21 qsort(ex,len,sizeof(Exchange),cmp);
22 for(int i=0;i<len;i++)
23 {
24 if(javabeans-ex[i].javabean>0)
25 {
26 sum+=ex[i].room;
27 javabeans-=ex[i].javabean;
28 }
29 else
30 {
31 sum+=javabeans*1.0/ex[i].javabean*ex[i].room;
32 break;
33 }
34 }
35 return sum;
36 }
37 int main()
38 {
39 //freopen("FatNouseTrade.txt","r",stdin);
40 int m,n;
41 while(scanf("%d%d",&m,&n)!=EOF)
42 {
43 if(m==-1&&n==-1)
44 break;
45 Exchange* e=new Exchange[n];
46 for(int i=0;i<n;i++)
47 scanf("%d%d",&(e[i].room),&(e[i].javabean));
48 double result=summation(e,n,m);
49 printf("%.3lf\n",result);
50 }
51 return 0;
52 }