首先我們發現, 那些保質期短, **又貴的我們肯定不會選
所以先拿單調佇列彈掉這些
然後就在保質期內選最便宜的就行
這樣我們發現, 外賣小哥來的次數少, 我們每次買的就多, 花費就多, 外賣小哥來的次數多, 我們每次買的就少, 但是付外賣的錢又多了起來
經過看題解後發現, 這應該是乙個單峰函式
那麼我們三分一下
最優情況下應該是保質期內買最便宜的, 並且每次外賣小哥來送的貨都是一樣的(除了最後一次不一定)
那麼只要我們買不滿, 就把他丟到最後一次送就行
#include #include #include #include typedef long long ll;
const int n = 205;
using namespace std;
int n, top;
ll m, k, ans;
struct node
} a[205], stk[205];
template < typename t >
inline t read()
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * w;
}ll f(ll x)
}return d;
}int main()
n = top;
for(int i = 1; i <= n; i++) a[i] = stk[i];
ll l = 1, r = m / k;
while(r - l >= 5)
for(ll i = l; i <= r; i++) ans = max(ans, f(i));
printf("%lld\n", ans);
return 0;
}
AHOI2014 JSOI2014 宅男計畫
傳送門 我們首先要發現乙個性質 存貨天數隨買食物的次數的變化類似於單峰函式。具體證明不會啊,好像是二分加三分來證明?但是沒有找到明確的嚴格證明。感性理解一下就是 買的食物太少,很容易餓死 買太多就沒錢了,也活不長。所以我們考慮如何對於當前三分的答案如何 text 有乙個顯而易見的性質就是我們不會用 ...
jzoj3673 JSOI2014 宅男計畫
description 外賣店一共有n種食物,分別有1到n編號。第i種食物有固定的價錢pi和保質期si。第i種食物會在si天後過期。jyy是不會吃過期食物的。比如jyy如果今天點了乙份保質期為1天的食物,那麼jyy必須在今天或者明天把這個食物吃掉,否則這個食物就再也不能吃了。保質期可以為0天,這樣這...
題解 JSOI2014 歌劇表演
我們可以把這些人拆成一些集合,保證對於乙個集合你只知道這個整體,而無法分辨出哪一部分是哪些人 起初所有人都在乙個集合中 我們對於每一次操作,肯定會有一些人屬於同乙個集合 那你就可以從這個集合中分辨出這些人來,把這些人摳出來重新丟進乙個集合 最後乙個人乙個集合的就可以被分辨出來 include inc...