NKOJ 1533 玩具(三分 貪心 單調佇列)

2021-08-09 02:14:54 字數 2136 閱讀 6672

問題描述

bessie的生日快到了, 她希望用d (1 <= d <= 100,000; 70%的測試資料都滿足1 <= d <= 500)天來慶祝. 奶牛們的注意力不會太集中, 因此bessie想通過提供玩具的方式來使它們高興. 她已經計算出了第i天需要的玩具數t_i (1 <= t_i <= 50). bessie的幼兒園提供了許多服務給它們的奶牛程式設計師們, 包括乙個每天以tc (1 <= tc <= 60)美元賣出商品的玩具店. bessie想盡可能的節省錢, 但是farmer john擔心沒有經過消毒的玩具會帶來傳染病(玩具店賣出的玩具是經過消毒的).

有兩種消毒的方式. 第1種方式需要收費c1美元, 需要n1個晚上的時間; 第2種方式需要收費c2美元, 需要n2個晚上的時間(1 <= n1 <= d; 1 <= n2 <= d; 1 <= c1 <= 60;1 <= c2 <= 60). bessie在party結束之後把她的玩具帶去消毒. 如果消毒只需要一天,那麼第二天就可以拿到; 如果還需要一天, 那麼第三天才可以拿到.

作為乙個受過教育的奶牛, bessie已經了解到節約的意義. 幫助她找到提供玩具的最便宜的方法.

輸入格式

輸出格式

樣例輸入

4 1 2 2 1 3

8 2 1 6

樣例輸出

設f(

x)表示總共買

x 個玩具提供玩具的總費用,設g(

x)表示總共買

x 個玩具所需要的給玩具消毒的費用。

那麼顯然有f(

x)=g

(x)+

x×tc

那麼由於此題可以用費用流求解,那麼根據vfk神犇的證明,f(

x)的一階導數單調不降,因此f(

x)是下凸的單峰函式。具體證明參見vfk。

那麼如何求解g(

x),貪心即可。

如果慢消毒的費用比快消毒高,那麼顯然只用快消毒。

如果買玩具比消毒便宜,那麼顯然全部買。

之後考慮一般情況,如果時間允許,那麼顯然慢消毒是更優的。

因此開三個單調佇列維護,維護時間單調遞減。

第乙個佇列

a 表示慢消毒的玩具,第二個佇列

b表示快消毒的玩具,第三個佇列

c 表示還沒有完成消毒的玩具。

維護時,每天用完的玩具加到c佇列中。

當c佇列的隊首時間與現在的時間差值大於等於快消毒時間時,將他加入b中。

當b佇列的隊首時間與現在的時間差值大於等於慢消毒時間時,將他加入a中。

每次優先用c佇列的隊首,然後再用b佇列的隊尾,不夠用就說明買的不夠,返回無窮大。

貪心的正確性是顯然的,具體可參考**。

**:

#include

#include

#include

#include

#define n 123456

using

namespace

std;

struct node

};deque

a,b,c;

int d,n1,n2,c1,c2,tc,t[n],sum;

int ok(int k)

else

}else

if(b.size())

else

}else

return

1e9;

}c.push_back(node(t[i],i));

}return ans;

}void ef(int l,int r)

while(l<=r)ans=min(ans,ok(l)),l++;

printf("%d",ans);

}int main()

if(n1if(c1>=c2)n1=n2,c1=c2;

ef(0,sum);

}

NKOJ 2723 PYC 的送分題 三分

問題描述已知n 條二次函式曲線si x a ix2 bix ci a i 0 s i x a ix 2 b ix c i a i geq 0 si x ai x2 b i x ci ai 0 定義f x ma xf x max f x m ax,求出f x f x f x 在 0,1000 0,10...

題 字首和 NKOJ 3049 三分陣列

nkoj 3049 三分陣列 時間限制 10000 ms 空間限制 65536 kb 問題描述 給出乙個有n 個整數的陣列a 1 a 2 a n 有多少種方法把陣列分成3 個連續的子串行,使得各子串行的元素之和相等。也就是說,有多少個下標對i,j 2 i j n 1 滿足 sum a 1 a i 1...

bzoj3874 宅男計畫 三分 貪心

題意 有許多種食品,每種有 保質期兩種屬性,乙個人有乙個數目的錢,求這個人可以活多久。如果資料範圍小一點那這個顯然可以 dp 然而 0 si 10 1 f,pi,m 10 1 n 200 我也很絕望啊 首先這個東西是個凸函式 為什麼?我不知道聯想生活實際 也就是存活天數是與送餐次數成凸函式 其實不是...