Codeforces Round 946 (Div. 3) G Money Buys Less Happiness Now(反悔贪心)
Money Buys Less Happiness Now
1.题目大意:
有n天,每天可以赚x块钱,然后每天可以通过花
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";
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步