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

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";
}
posted @ 2024-05-23 20:08  orzkeyhacker  阅读(32)  评论(0编辑  收藏  举报