1. 程式人生 > >牛客訓練三:處女座的訓練(貪心)

牛客訓練三:處女座的訓練(貪心)

ios lld 可能 space for gif ret 題解 tdi

題目鏈接:傳送門

思路:要求最後求出的時間盡可能的小,一開始我只想到了用排序分別討論ai和bi的大小,

後來發現結果與兩者都有關系,然後……就沒做出來。

後來看了題解,發現如果只要讓ai/bi盡可能大,就能保證所得到的時間是最小的,讓ai/bi

降序排序,然後貪心即可。

技術分享圖片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100100+10;
typedef long long LL;
struct Node{ LL ai,bi; }cur[maxn]; bool cmp(Node a,Node b) { return 1.0*a.bi/a.ai>1.0*b.bi/b.ai; } int main(void) { int n,i; while(~scanf("%d",&n)) { LL tp=0; for(i=0;i<n;i++) scanf("%lld%lld",&cur[i].ai,&cur[i].bi),tp+=cur[i].bi; sort(cur,cur+n,cmp); LL ans
=0; for(i=0;i<n;i++) { tp=tp-cur[i].bi; ans+=tp*cur[i].ai; } printf("%lld\n",ans); } return 0; }
View Code

牛客訓練三:處女座的訓練(貪心)