jzoj3673 JSOI2014 宅男計畫

2021-10-01 11:28:38 字數 2270 閱讀 1362

description

外賣店一共有n種食物,分別有1到n編號。第i種食物有固定的價錢pi和保質期si。第i種食物會在si天後過期。jyy是不會吃過期食物的。

比如jyy如果今天點了乙份保質期為1天的食物,那麼jyy必須在今天或者明天把這個食物吃掉,否則這個食物就再也不能吃了。保質期可以為0天,這樣這份食物就必須在購買當天吃掉。

jyy現在有m塊錢,每一次叫外賣需要額外付給送外賣小哥外送費f元。

送外賣的小哥身強力壯,可以瞬間給jyy帶來任意多份食物。jyy想知道,在滿足每天都能吃到至少一頓沒過期的外賣的情況下,他可以最多宅多少天呢?

input

第一行包含三個整數m,f和n。

接下來n行,第i行包含兩個整數pi和si。

output

輸出僅包含一行乙個整數表示jyy可以宅的最多的天數。

sample input

32 5 2

5 010 2

sample output

data constraint

樣例說明:

jyy的最佳策略是:

第一天買乙份食物1和乙份食物2並且吃乙份食物1;

第二天吃乙份食物2;

第三天買乙份食物1並且吃掉。

自從迷上了拼圖,jyy就變成了個徹底的宅男。為了解決溫飽問題,jyy不得不依靠叫外賣來維持生計。

賽時比賽沒有什麼腦子,一直在想dp。

想了半天的收穫就是想到了可以把沒用的食物用dp去掉。

後來發現似乎可以二分答案,瞎猜了個結論是考慮平均分配錢去買食物。

那就開打。打完,發現對拍怎麼拍也拍不過。

調了好久。心態崩了,看到時間不太夠,交了個30分上去滾粗。

題解現在才發現我是真的蠢。

60分思路大概:考慮列舉購買次數,然後二分答案。二分的時候直接判斷即可。

具體判斷則是:

由於知道購買次數,然後平均分配一下m,然後暴力跑即可。

然鵝我沒有分配剩下的錢!!!

100分就是60分瞎優化一下就好了。

我們發現,二分是騙小孩的,如果知道購買次數是可以利用平均分配的思想求出最大答案的。

其實是分三步:

1、平均分配,蘋 鈞 煮 翼然後求出分配的最大天數。

2、求出天數之後就可以知道剩下的錢是多少了。

3、剩下的錢可以繼續跟在某次購買後購買物品。

這樣就最大化ans了。

然後,我們只需要求這個奇妙的購買次數即可。

由於我們發現,購買次數和ans所形成的影象是乙個上凸的影象(感性理解)

然後就三分即可。

**

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1000001

;long

long m,ff,v[maxn]

,d[maxn]

,f[maxn]

,g[maxn]

,z[maxn]

;int n,gs;

long

long

getday

(long

long mo)

else

}return ans;

}long

long

getleft

(long

long da)

else

}return ans;

}long

long

check

(long

long x)

}return ans;

}int

main()

for(

int i=

1;i<=n;i++)}

}long

long l=1;

gs=0;

while

(l<=n)

l=1;long

long r=m/ff;

while

(l+5

<=r)

long

long ans=0;

for(

long

long i=l;i<=r;i++

)printf

("%lld\n"

,ans)

;}

JZOJ3864 JSOI2014 歌劇表演

我們想想乙個人在什麼情況下會被發現 我們給每個數標上乙個識別號,相同的識別號代表這兩個數性質相同無法識別,而當乙個數擁有乙個唯一的識別號時,該數就可以被識別。為了不讓識別號混亂,又要讓區間的數的識別號的相對位置不變,我們每次取1 n中的最大值t,每次區間中若遇到乙個新出現的識別號,我們就用t 1給它...

JSOI2015 JZOJ 4063 非誠勿擾

對於每個女性,開乙個vector記錄可選的男性 掃一遍,可以o 1 算出該女性選擇第i個男性的期望 推推公式發現是等比數列 有了這個就好辦啦,按女性為第一關鍵字男性第二關鍵字排個序,用樹狀陣列記錄下前面的女性選擇比當前大的男性的概率和 o nlogn 在算期望時涉及除法運算,精度誤差較大,所以要開l...

JZOJ3861 JSOI2014 支線劇情2

這是一道樹形dp的題。雖然我到死也沒想出來 我們設出f x 0.1 f x 0 表示當前以x為根的子樹全不放存檔點的代價。f x 1 表示當前以x為根的子樹放了存檔點的代價。f x 0 的轉移顯然,我們來想想怎麼轉移f x 1 以x為根的子樹若放了存檔點,有3種情況 1 當前的x的直接兒子y,假如它...