1. 程式人生 > >HDU-1009的解題報告

HDU-1009的解題報告

str 鏈接 scan n) 思路 AI 準備 stdio.h javabean

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的解題報告