Money Buys Less Happiness Now
1.題目大意:
有n天,每天可以賺x塊錢,然後每天可以透過花\(C_{i}\)塊錢購買1點快樂值,然後每天賺的錢至少要在下一天才能用,問最多能獲得多少快樂值。
2.解題思路:
我們發現天數變得很多,不能像e題那樣dp了,所以要用貪心。具體來講,我們碰到當前能買的就直接買,如果買不了,就從之前買過的但是比自己貴的那些物品裡面挑一個最貴的,然後用當前的物品替換。可以發現這樣一定是最優的,因為換掉最貴的就一定能留下更多的錢買後面的物品。(可能從來沒做過這樣的題吧,所以想半天一點思路都沒有
3.程式碼:
void solve() {
ll n, x;cin >> n >> x;
vi a(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i];
ll now = 0;
priority_queue<ll> q;
for(int i = 1; i <= n; i++) {
if(now >= a[i]) {
now -= a[i];
q.push(a[i]);
} else {
if(!q.empty() && q.top() > a[i]) {
now += q.top() - a[i];
q.pop();
q.push(a[i]);
}
}
now += x;
}
cout << q.size() << "\n";
}