Problem Description
bLue 带了 m 元钱去商店买文具,柜台上剩有 n 个文具套装,每个套装售价 ai 元,内含 bi 件相同种类的文具。
现在 bLue 想用身上的钱购买尽可能多的文具,你能帮他计算最多可以买到多少件文具吗?
由于店老板看 bLue 是老顾客,文具套装可以拆开卖,单件售价为 ai/bi(保证可以整除且单价至少为 1)。
Input
输入数据有多组(数据组数不超过 100),到 EOF 结束。
对于每组数据:
第 1 行输入 2 个整数 n (1 <= n <= 100) 和 m (1 <= m <= 10000),分别表示可购买套装的数量和 bLue 携带的钱数
接下来 n 行,每行输入 2 个整数 ai (1 <= ai <= 1000) 和 bi (1 <= bi <= 10),分别表示第 i 个套装的售价和其中文具的件数
Output
对于每组数据,在 1 行中输出 1 个整数,表示 bLue 最多可以买到的文具数量。
Sample Input
3 5
4 2
2 1
1 1
4 20
5 5
8 1
5 5
12 3
Sample Output
3
12
#include <stdio.h>
#include <stdlib.h>
struct wenju
{
int a;
int b;
int ave;
}st[1000],t;
int main()
{
int n,m,i,j;
while(~scanf("%d %d",&n,&m))
{
for(i=0;i<=n-1;i++)
{
scanf("%d %d",&st[i].a,&st[i].b);
st[i].ave=st[i].a/st[i].b;
}
for(i=0;i<=n-2;i++)
{
for(j=0;j<=n-2-i;j++)
{
if(st[j].ave>st[j+1].ave)
{
t=st[j];st[j]=st[j+1];st[j+1]=t;
}
}
}
int sum=0;
for(i=0;i<=n-1;i++)
{
if(m>st[i].a)
{
sum=sum+st[i].b;
m=m-st[i].a;
}
else
{
sum=sum+(m/st[i].ave);
break;
}
}
printf("%d\n",sum);
}
return 0;
}