題意:有許多種食品,每種有**、保質期兩種屬性,乙個人有乙個數目的錢,求這個人可以活多久。
如果資料範圍小一點那這個顯然可以$dp$……然而$0<=si<=(10^),1<=f,pi,m<=(10^),1<=n<=200$……我也很絕望啊……
首先這個東西是個凸函式(為什麼?我不知道聯想生活實際),也就是存活天數是與送餐次數成凸函式(其實不是嚴格單峰,但在本題可以忽略),那麼我們顯然可以三分求出最大函式值。
問題變為給出乙個$x$,如何求出乙個$y$。
根據貪心原則,保質期短**貴的直接扔掉,於是我們先預處理一下,預處理完之後我們就挨個購買,考慮這個東西每次可以購買的數量。注意最後可能還剩下一些錢夠買幾次但是不足夠每次都買,這一部分也要加以考慮。
1 #include 2 #include 3 #include 4 #include 5bzoj3874using
namespace
std;
6const
int maxn=205;7
struct
food
8fin[maxn],sta[maxn];
11 inline bool comp(const food &x,const food &y)
1216 inline bool cmp(const food &x,const food &y)
1720
long
long m,f;int
p,n;
21 inline long
long f(long
long
val)
2233
if(fin[i].s>=day)
3438}39
return
ans;40}
41int
haha()
4257
for(long
long i=l;i<=r;i++)ans=max(ans,f(i));
58 printf("
%lld\n
",ans);59}
60int sb=haha();
61int main()
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 3874 Ahoi2014 宅男計畫
看到這一題題面,莫名想到了 蔬菜 於是莫名開始恐慌。考場上只知道有個貪心計算快遞小哥來一次,我要買能活n天的最小花費,卻沒想到還有乙個三分法來列舉快遞小哥來的次數!首先我們可以腦補一下,快遞小哥來的次數,和宅男活的總天數是成乙個二次函式關係的。就像快遞小哥來的次數少,那宅男多數的錢只能分到這麼少的購...