个人想法:这道题其实很简单,只需要sort一下,再用while循环进行小数求解就行了。(代码如下,dalao勿喷)
struct mj{
double mi,vi;
double w;
}a[105];
int main()
{
double n,t;
double ans=0;
cin>>n>>t;
for(int i=1;i<=n;i++)
{
cin>>a[i].mi>>a[i].vi;
a[i].w=a[i].mi/a[i].vi;
}
for(int i=1;i<=n;i++)
{
for(int j=n;j>i;j--)
{
if(a[j].w<a[j-1].w)
swap(a[j],a[j-1]);
}
}
int i=1;
while(t>=0&&i<=n)
{
if(t-a[i].mi>=0)
t-=a[i].mi,ans+=a[i].vi;
else
ans+=(t/a[i].mi)*a[i].vi,i=n;
i++;
}
printf("%.2lf",ans);
return 0;
}