bzoj 3874 Ahoi2014 宅男計畫

2022-04-28 19:39:10 字數 1972 閱讀 6222

看到這一題題面,莫名想到了(蔬菜),於是莫名開始恐慌。考場上只知道有個貪心計算快遞小哥來一次,我要買能活n天的最小花費,卻沒想到還有乙個三分法來列舉快遞小哥來的次數!

首先我們可以腦補一下,快遞小哥來的次數,和宅男活的總天數是成乙個二次函式關係的。就像快遞小哥來的次數少,那宅男多數的錢只能分到這麼少的購買次數中,因為便宜的保質期短,每次必然會買一些保質期長**貴的食物;當快遞小哥來的次數多了,那我的錢可以分配到很多次購買機會中,是可以每次買些便宜的,可是你就會發現錢不多了(都給快遞小哥付運費了!)所以我們三分找到中間的那乙個平衡點(合理的購買次數能(錢盡其用)活得更久!!)

這是三分,那本題貪心貪在哪兒呢?我們讀題發現,他給你的食品中肯定有一些垃圾食品(**貴,保質期又短),我們可以進行篩選:單調佇列,先將食品按保質期從大到小排序,然後放入以**單調增的佇列中去(因為後面放進取得食品保質期一定更長(排了序的),一但**還比前乙個低,就可以取代前乙個食品)

然後還有乙個貪心,就是在 $ check() $ 函式中,計算能活的最長天數時,只要在保質期內,我一定買最便宜的。就像我現在經篩選後有兩個食品,乙個保質期為5,**為4,另乙個保質期為8,**為7,那我 $ [1,6] $ 天一定買第乙個, $ [7,9] $ 天一定買第二個!因為我們單調棧中時間從小到大,所以每次算活得最長天數時複雜度 $ o(n)

$ 再加上三分的複雜度,本題剛好夠用!

然後對代嗎做個解釋:因為根據題意,保質期為1天的食品,可以留兩天!!!(被這個坑慘了)所以我們在讀入時乾脆就給保質期加一,這樣方便運算!然後解釋一下我的 $ check() $ 函式:

我的 $ check() $ 買東西時,是同步的,如果買乙個食品,那快遞小哥來的 $ x $ 次都買這個食品(那個 $ if $ 除外)

$ left: $ 我還剩下的錢的數量,(因為特性1,所以每一次都要減去我買的食品的**乘以它的數量再乘以 $ x $ 天)

$ now: $ 我同步買東西能同步維持的天數目前是多少

$ day: $ 我有幾天需要買這一種食品(如果沒有足夠的錢貪心的買,就會轉到 $ if $ 中去)

$ tot: $ 我總共能維持多少天

$ if(now

接下來一切以**為準:

#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define db double

#define inf 0x7fffffff

#define rg register int

using namespace std;

struct sua[215],b[215];

ll n,top;

ll ans,m,f;//如題

inline ll qr()

inline bool cmp(su x,su y)

inline ll check(ll x)//剩餘的錢不能支援每一次都買了,就能賣幾次買幾次,然後return

}return tot;

}int main();

sort(a+1,a+n+1,cmp); //按時間排序!!!(非價值)

for(rg i=1;i<=n;b[++top]=a[i],++i)

while(top&&a[i].v<=b[top].v)--top;//用單調棧進行食品篩選(加速)

ll l=1,r=m/(f+b[1].v),mid1,mid2,tot,s1,s2;//r的值可以算出來

while(l<=r)printf("%lld\n",ans);

return 0;

}

BZOJ 3874 Ahoi2014 宅男計畫

題意 外賣店一共有n種食物,分別有1到n編號。第i種食物有固定的價錢pi和保質期si。第i種食物會在si天後過期。jyy是不會吃過期食物的。比如jyy如果今天點了乙份保質期為1天的食物,那麼jyy必須在今天或者明天把這個食物吃掉,否則這個食物就再也不能吃了。保質期可以為0天,這樣這份食物就必須在購買...

bzoj 3874 Ahoi2014 宅男計畫

故事背景 自從迷上了拼圖,jyy就變成了個徹底的宅男。為了解決溫飽問題,jyy 不得不依靠叫外賣來維持生計。問題描述 外賣店一共有n種食物,分別有1到n編號。第i種食物有固定的價錢pi和保質期si。第i種食物會在si天後過期。jyy是不會吃過期食物的。比如jyy如果今天點了乙份保質期為1天的食物,那...

bzoj 3875 Ahoi2014 騎士遊戲

故事背景 長期的宅男生活中,jyy又挖掘出了一款rpg遊戲。在這個遊戲中jyy會 扮演乙個英勇的騎士,用他手中的長劍去殺死入侵村莊的怪獸。問題描述 在這個遊戲中,jyy一共有兩種攻擊方式,一種是普通攻擊,一種是法術攻 擊。兩種攻擊方式都會消耗jyy一些體力。採用普通攻擊進攻怪獸並不能把怪獸徹底殺死,...