题目大意:
有n只兔子,每只兔子抓回去的时间为ti,回来的时间也是ti,则抓一只兔子要2*ti的时间,di则为每只兔子一个时间单位能吃多少草,用最优方法做的话它们一共吃了多少草(最少)
贪心标准:
我们先把每一只兔子的性价比算出来(di/ti),及在一个时间单位里能阻止吃多少草,如果性价比相同,则根据其他兔子在这只兔子搬运的时间中能吃多少草进行比较
#include <bits/stdc++.h>
using namespace std;
long long a,d,sum=0,h[1000],l,ddd;
struct node{//定义1个称为node的一个结构体;
long long t;
long long d;
double xing;//调用的数据类型
} k[1000];//使用的数组
bool cmp(node f1,node f2){//调用两个名称为node的结构体
return(f1.xing>f2.xing)||((f1.xing==f2.xing)&&f1.t*(d-f1.d)<f2.t*(d-f2.d));
//先根据性价比,再根据边的兔子的吃草量
}
int main()
{
cin>>a;
for(int i=1;i<=a;i++){
cin>>k[i].t>>k[i].d;
k[i].xing=k[i].d*1.00/double(k[i].t);//算性价比,不能k[i].d/k[i].t*1.00 因为先除出来的是整数再乘小数相当于没乘
ddd+=k[i].d;//算所有兔子在一个时间单位内能吃多少草
}
sort(k+1,k+1+a,cmp);
for(int i=1;i<=a;i++){
ddd-=k[i].d;//减除在抓的兔子的吃草量
sum+=k[i].t*ddd*2;//因为搬运时间有两趟,所以乘2,
}
cout<<sum;
return 0;
}