본문 바로가기
알고리즘/백준

백준 23559 밥 C++

by ash9river 2025. 8. 8.

요약

밥을 잘먹으면 되는이야기

 

 N일간의 최대치를 구해야하는데, 5000원 1000원이 있다.

 

1. 먼저 1000원으로 N일치를 채우고, 가진 돈에서 1000원 * N을 제한다.

2. 5000원과 1000원의 차를 큐에 넣는다.

3. 차가 제일 큰 수부터 가능한 예산에서 뽑는다.

 

A_0, A_1, ... A_N을 뽑고, 그 다음에 ( B_k - A_k )를 뽑기에 최대값을 뽑을 수 있다.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#define ll long long
using namespace std;
int main(){
  int n,x;
  cin>>n>>x;
  vector<pair<ll,ll>> v(n,pair<ll,ll>());
  for(int i=0;i<n;++i){
    cin>>v[i].first>>v[i].second;
  }
  vector<bool> visited(n,false);
  ll ans=0;
  priority_queue<ll> q;
  for(int i=0;i<n;++i){
    ans+=v[i].second;
    x-=1000;
    q.push(v[i].first-v[i].second);
  }
  while(!q.empty()&&x>=4000){
    ll val=q.top();
    q.pop();
    if(val<=0) break;
    x-=4000;
    ans+=val;
  }
  cout<<ans;
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 16954 움직이는 미로 탈출 C++  (0) 2025.08.08
백준 14677 병약한 윤호 C++  (0) 2025.08.08
백준 32069 가로등 C++  (2) 2025.07.20
백준 2073 수도배관공사 C++  (1) 2025.03.02
백준 13459 구슬 탈출 C++  (0) 2025.02.24