Official

C - Flavors Editorial by physics0523


以下の場合分けを施します。

  • 同じ味のアイスを \(2\) つ選んで食べる
    • 味を固定し、その味のアイスのうち最も美味しさが大きい \(2\) つを食べる場合のみ考えればよいです。
  • 異なる味のアイスを \(2\) つ選んで食べる
    • まず、どの味のアイスについても、最も美味しさが大きいもの以外は食べないとしてよいです。その上で、残りのアイスのうち最も美味しさが大きい \(2\) つを食べる場合のみ考えればよいです。
#include<bits/stdc++.h>

using namespace std;

int main(){
  int n;
  cin >> n;
  vector<vector<int>> bk(n+1);
  for(int i=0;i<n;i++){
    int f,s;
    cin >> f >> s;
    bk[f].push_back(s);
  }

  int res=0;
  vector<int> best;
  for(int i=1;i<=n;i++){
    sort(bk[i].begin(),bk[i].end());
    reverse(bk[i].begin(),bk[i].end());
    if(bk[i].size()>=2){
      res=max(res,bk[i][0]+bk[i][1]/2);
    }
    if(bk[i].size()>=1){
      best.push_back(bk[i][0]);
    }
  }
  sort(best.begin(),best.end());
  reverse(best.begin(),best.end());
  if(best.size()>=2){res=max(res,best[0]+best[1]);}
  cout << res << "\n";
  return 0;
}

posted:
last update: