八目鰻(貪心)題解

2021-10-06 07:02:35 字數 1309 閱讀 5487

upc no.21場 問題 g: 八目鰻

時間限制: 1 sec 記憶體限制: 128 mb

題目描述

公尺斯蒂婭去捕捉八目鰻為開店作準備。現在,她在乙個有八目鰻的池塘邊。她知道池塘裡的有n條八目鰻,把第i條八目鰻從池塘弄回小店需要ti∗2個單位的時間(畢竟需要往返)。

這些八目鰻會自己吃p點!隨著時間的推移,公尺斯琪把它們弄回來所消耗的體力與時間成正比,即在第t個時刻開始運第i條八目鰻所消耗的體力為t∗ci,其中,ci是給定的常數。一開始所有的八目鰻都沒有p點,也就是說運送第一條八目鰻所消耗的體力為0。

公尺斯琪想知道把所有八目鰻運回小店所消耗的體力最少是多少。

輸入第一行輸入乙個整數n,表示八目鰻的數量。

接下來n行,每行包含兩個整數ti,ci。

輸出乙個整數,表示最少消耗的體力。

樣例輸入 copy

63 1

2 52 3

3 24 1

1 6樣例輸出 copy

86提示

對於10%的資料,n≤10,t≤100,ci≤10;

對於60%的資料,n≤1000,t≤20000,ci≤100;

對於100%的資料,n≤100000,t≤2000000,ci≤100。

題解:這道題主要在理解,理解了就很好做,理解不了,em…可以洗洗睡了qaq,會讓人很炸裂。本來打算用完全揹包寫的,但是後來發現完全可以不用。「ti∗2個單位的時間」 表示:前面運回去幾條魚的時間 總和為ti。拿樣列來說,假如已經運了兩條,那麼第三條就要花費(3+2)*2個時間,所以不需要完全揹包就可以寫,這樣貪心比揹包更快。

需要根據以上的價效比排個序【畫個重點】。

下面附ac**:

#include

#define ll long long

#define x first

#define y second

using

namespace std;

typedef pair<

int,

int> pii;

const

int n=

1e5+

1000

;pii q[n]

;int n;

bool

cmp(pii a,pii b)

intmain()

cout<

}