HDU 4122 單調佇列

2022-03-16 20:58:21 字數 1178 閱讀 7861

給定n個訂單,在相應時刻都要生產num[i]個月餅,給出m個可以生產的時刻和這個時刻生產單個產品的費用cost[i],每個月餅可以儲存t個小時的保質期,但是儲存月餅也是要花錢的,每小時儲存需要花費s,求出最小花費。

一定要讀清楚題意。

其實對於每個訂單都有乙個確定的生產時刻(最優的情況下),並且只有乙個,我們可以使用單調佇列來求出這個最優時刻。這個進佇列的判斷還是有點特殊的,如果當前進佇列的單價花費cost[i] <= cost[que[tail-1]]+s*(i-que[tail-1]),(這裡的que陣列是用來模擬佇列的,que中儲存的是cost的下標。)就需要隊尾出元素,因為隊尾的元素不如當前時刻的花費更優。單調佇列中還有乙個要點是區間長度,這裡就是用t來擔當了,雖然隊首的元素時刻的花費(相對當前時刻來說)最優,但是過了保質期也不行啊。這樣我們就可以開做了。

#include#include#include#include#include#include#include#include#includetypedef long long ll;

using namespace std;

const double esp=1e-6;

const int inf=0x3f3f3f3f;

const int maxn=1e5+50;

int n, m, time[2507], t, s, cost[maxn], q[maxn];

ll num[2507];

int getmonth(char* s)

int days[15] = ;

bool isleap(int y)

int get_hours(int y, int m, int d, int h)

for(int i=1; i2)

ans += 24;

ans+=(d-1)*24;

ans+=h;

return ans;

}int main()

}printf("%lld\n", sum);

} return 0;

}

hdu 4122 單調佇列或線段樹

hdu 4122 單調佇列 題目大意 給定n個時刻,在每乙個時刻都要生產ai個月餅。給出m個可以生產的時刻,每個時刻單個生產費用為bi,單個月餅可儲存t時間,單位時間費用為s 問如何安排生產花費最少 解題思路 用單調佇列維護乙個點之前所有點的最小花費 為生產費 儲存費 特別注意 n個時刻可能有重複的...

HDU3415單調佇列

這題是單調佇列的典型運用。至於單調佇列,就是乙個雙端佇列,在隊首 f 出隊,在隊尾 b 出隊入隊,我們要維護整個佇列的元素是單調的,比如,我們要動態查詢從左向右的區間的最小值,那麼我們就要在佇列中維護乙個單調遞增的序列,從左向右列舉,佇列的元素還有乙個id值,代表這個元素在原序列中的位置,然後左邊的...

HDU 3415單調佇列

這個題目屬於常見題型,給定一組環狀數列,求出其中長度不超過k的數字之和的最大值。用到了字首和的技巧,比如要求i,j間所有數字之和,可以提前在輸入的時候計算出從0 i的數字之和及從0 j的數字之和,那麼sum i j sum j sum i 現在的問題是求出最大的sum i j 那麼我們可以固定sum...