https://ac.nowcoder.com/acm/problem/25043
题意:
有n头牛要***漂亮的花朵,已知每头牛迁回牛舍的时间以及每分钟***花的数量,问最少要损耗多少花才能遏制这种行为。
分析:
出于保护美的渴望,这种止损的行为下意识贪心了起来,脑瓜不够用先简化一下问题,假设只有2头牛,如果我们牵第一个回去,那么损失花朵数量=第一个迁过去来回的时间*第二个每分钟***花的数量,如此看来,我们要比较排序每头牛迁回牛舍的时间与之后牛吃花的速度,如此进行贪心选择。
代码:
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> using namespace std; typedef long long ll; int i,j,n,k,tt,m; ll cnt; using namespace std; struct Hi{ int t,d; }a[100005]; int cmp(Hi aa,Hi bb){ return aa.t*bb.d<aa.d*bb.t; } int main() { scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d%d",&a[i].t,&a[i].d); } sort(a,a+n,cmp); for(i=0;i<n;i++){ cnt+=a[i].d*tt; tt+=a[i].t*2; } printf("%lld",cnt); }