当前位置: 代码迷 >> 综合 >> HDU 1009 FatMouse' Trade (贪心)
  详细解决方案

HDU 1009 FatMouse' Trade (贪心)

热度:83   发布时间:2023-12-05 06:29:46.0
//题意自己看,不会度娘,很裸的贪心,没啥好说的
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;struct node
{double jb;double ds;double num;
}a[1005];
//定义结构体 分别为JavaBean,数量,兑换比例; 
int cmp(node a,node b)
{if(a.num==b.num)return a.jb>b.jb;elsereturn a.num>b.num;		
}
//按兑换比例从大到小排序,因为肯定是先换兑换比例大的,如果兑换比例相同就优先把数量多的放前面 
int main(int argc, char *argv[])
{double sum;int n,m;int i,j;while(scanf("%d %d",&n,&m)!=EOF){if(n==-1&&m==-1)break;sum=0;	for(i=0;i<m;i++){scanf("%lf %lf",&a[i].jb,&a[i].ds);a[i].num=a[i].jb/a[i].ds;			}//输入的同时把比例求出来	sort(a,a+m,cmp);for(i=0;i<m;i++){if(n>=a[i].ds){sum+=a[i].jb;n-=a[i].ds;}//能完整的换完 else{sum+=a[i].num*n;break;	}//不能完整的换完,同时也代表没钱了,所以换完就break }	printf("%.3lf\n",sum);	}	return 0;
}
//Start-ZJ
//2017/12/5/11:17