贪心的题目首先要把所求的量用已知的变量表示出来
简单的基本题一般有两个变量,再根据两个变量的关系对 结果的影响,写出排序的条件
本题中,对于cow[i],在 j 时刻的时候,
该牛要消耗:2*∑Tj*Di
而影响顺序的值就是 d 和 t 的比率,比较好想,百度一下也有证明的博客
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
__int64 d,t;
}cow[100010];
bool cmp(node a ,node b)
{
return a.d*1.0/a.t > b.d*1.0/b.t;
}
__int64 ans,tt;
int i,n;
int main()
{
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%I64d%I64d",&cow[i].d,&cow[i].t);
}
sort(cow,cow+n,cmp);
ans=0;
for(i=0;i<n;i++)
{
ans+=(2*tt*cow[i].d);
tt+=cow[i].t;
}
printf("%I64d\n",ans);
}
return 0;
}