Official

C - Cheese Editorial by physics0523


基本的に、チーズ \(1\)[g] あたりの美味しさが大きいものから使っていくことが最適です。
まず、チーズを美味しさが大きい方からソートします。そのうえで、順番にチーズを使えるだけ使えばよいです。
具体的には、チーズの美味しさが大きいものから順に以下を行うとよいです。

  • チーズを残り \(w\)[g] 使え、現在着目しているチーズが \(B_k\)[g] 残っているとき、そのチーズを \(\min(w,B_k)\)[g] 使うことにする。

実装例(C++)

#include<bits/stdc++.h>
using namespace std;
int main(){
  long long n,w;
  cin >> n >> w;
  vector<pair<long long,long long>> v(n);
  for(auto &nx : v){
    cin >> nx.first >> nx.second;
  }
  sort(v.begin(),v.end());
  reverse(v.begin(),v.end());
  long long res=0;
  for(auto &nx : v){
    res+=nx.first*min(w,nx.second);
    w-=min(w,nx.second);
  }
  cout << res << '\n';
  return 0;
}

posted:
last update: