题目大意:
有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;
}