首先贴代码
#include <iostream>
#include <stdio.h>
using namespace std;
struct bb{
int m;
int t;
double p;
};
int main ()
{
int N,M,i,j,lin,num1=0,num2=0;
double a;
bb d[103];
cin>>N>>M;
for (i=1;i<=N;i++)
{
cin>>d[i].m>>d[i].t;
d[i].p=d[i].t/d[i].m;
for (j=1;j<i;j++)
{
if (d[j].p<d[j+1].p)
{
lin=d[j].m;
d[j].m=d[j+1].m;
d[j+1].m=lin;
lin=d[j].t;
d[j].t=d[j+1].t;
d[j+1].t=lin;
lin=d[j].p;
d[j].p=d[j+1].p;
d[j+1].p=lin;
}
}
}
for (i=1;i<=N;i++)
{
if (M-num1>=d[i].m)
{
num1=num1+d[i].m;
num2=num2+d[i].t;
}
else if (M-num1<d[i].m)
{
num2=(int)(num2*100+d[i].t*(M-num1)/d[i].m*100+0.5);
num1=M;
}
if (num1==M)
break;
}
a=(double)num2/100;
printf("%.2lf",a);
return 0;
}
数据解释
- N:即题目中原意义
- M:即题目中的T
- m:即mi
- t:即vi
- p:即m/t