HDU-1009的解題報告
Hdu-1009
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
題意:Fatmouse準備M磅的貓食,準備與貓守衛倉庫有他最愛吃的食品貿易,JavaBean倉庫有N個房間。第i個房間包含J [i]磅 JavaBeans和需要F [i]磅貓食。FatMouse並不交易房間裏的所有JavaBeans相反,他可以得到J [i] *a%磅的JavaBeans如果他支付F [i] *a%磅的貓食,這裏a是實數。他現在是分配給你這個作業:告訴他,他能獲得的最多數量的JavaBeans。
思路:(1)定義一個結構體,用於存放J(i)和F(i),同時存放每個房間的交換比率a%;(2)輸入M,N,J(i),F(i);(3)將每個房間的交換比率從大到小進行排序;(4)求出最多能得到的JavaBeans。
#include<stdio.h>
typedef struct
{
int j,f;
double r;
}node;
node a[1000],t;///////////////////註意此處應在外部定義;
int main()
{
int i,k,m,n;
double sum;
while(~scanf("%d%d",&m,&n)&&(m!=-1||n!=-1))
{
sum=0;
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].j,&a[i].f);
a[i].r=(double)a[i].j/a[i].f;////////求出每個房間的交換比率
}
//////////////////////////////////////////////將每個房間的交換比率按照降序排列
for(i=0;i<n-1;i++)
{
for(k=i+1;k<n;k++)
{
if(a[i].r<a[k].r)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
//////////////////////////////////////////求出總和
for(i=0;i<n;i++)
{
if(m>=a[i].f)
{
sum=sum+a[i].j;
m=m-a[i].f;
}
else
{
sum=sum+m*a[i].r;
m=0;
break;
}
}
printf("%.3lf\n",sum);
}
return 0;
}
HDU-1009的解題報告