这是一道基本的贪心算法题,运用结构体排序知识,一次就AC了。
不过耗时有点多,62ms,用什么办法可以解决呢?请高手指点。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009
#include<stdio.h>
struct food
{
float p,f,j;
};
int main()
{
food fo[1000],temp;
int m,n,i,j;
float s;
scanf("%d%d",&m,&n);
while (m!=-1)
{
s=0;
for (i=0;i<n;i++)
{
scanf("%f%f",&fo[i].j,&fo[i].f);
fo[i].p=fo[i].j/fo[i].f;
}
for (i=n-1;i>=1;i--)
{
for (j=0;j<i;j++)
if (fo[j].p>fo[j+1].p)
{
temp=fo[j];
fo[j]=fo[j+1];
fo[j+1]=temp;
}
if (m>fo[i].f)
{
s+=fo[i].j;
m-=fo[i].f;
}
else
{
s+=m/fo[i].f*fo[i].j;
break;
}
}
if (i==0)
{
if(m>=fo[0].f) s+=fo[0].j;
else s+=m/fo[0].f*fo[0].j;
}
printf("%.3f\n",s);
scanf("%d%d",&m,&n);
}
return 0;
}