HDU4791 貪心 二分優化

2021-07-23 11:27:27 字數 1061 閱讀 3363

題意:

有一家列印店,列印超過一定分數後每份的單價就會降低,你需要列印一些檔案,你可以列印敲好的份數或者是多列印一些廢紙以湊得更低的**,問列印這些檔案所需的最小花費。

題解:

採用貪心策略,從最單價低價開始計算,直到計算到數量的區間正好包含所需印刷的產品數量。

但是單純採取貪心策略遍歷整個**陣列會tle,所以需要二分優化,先二分找到包含當前**的**區間,然後在當前區間內的**以及數量超過當前區間的區間中選取最低總價。

**:

#include 

#include

#include

using

namespace

std ;

#define max 100005

#define inf 0x7fffffffffffffff

struct node1

ans[max];

struct node

print[max];

bool comp1(const

struct node1&a , const

struct node1&b)

bool comp2(const

struct node1&a , const

struct node1&b)

int main()

for(int i = 0 ; i < m ; i ++)

sort(ans , ans+ m , comp1) ;

long

long temp = inf ;

int cnt = m-1 ;

for(int i = n - 1 ; i >= 0 ; i --)

cnt -- ;

}if(temp > print[i].sum)

}sort(ans , ans + m,comp2);

for(int i = 0 ; i < m ; i ++)

}return

0 ;}

hdu 4791 dp預處理 二分

題意 列印東西,給出區間 張數 對應費用 到達一定張數就都按某更低的 m次詢問,問最優費用。給的時候按張數遞增給的。dp出當前張數到最後的最小值。對於詢問q,然後二分處 q的最小的乙個張數的 min 這個 p,dp 這 1 即可。nlogn 後來看網上有些人用線段樹,沒必要的。ps 開始竟然因為犯中...

HDU 3650 貪心 二分

這個題資料量比較小,所以類似於模擬也可以做。按照起始時間排序,然後從最小的起點開始,找在這一天內能夠 的所有節目,寫了個二分優化了時間。include include include include define maxn 110 using namespace std typedef struct...

hdu 4864 Task 貪心 二分 set

題意 有n臺機器,m個任務,每台機器有xi,yi,每個任務也有xj,yj,當乙個任務可以被處理的條件是,xj xi 且 yj 貪心的話,如果是遍歷任務的話,那麼我們希望盡可能做時間和level更高的任務,我們可以先按時間排,時間相同按level,遞增排,機器也是按這個排。然後從最大價值的任務開始遍歷...