Codeforces Round 946 (Div. 3) G Money Buys Less Happiness Now(反悔貪心)

orzkeyhacker發表於2024-05-23
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";
}

相關文章