けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 067 B - Snake Toy (6Q, 灰色, 200 点)

ソートの練習!

問題概要

 N 個の整数  l_{1}, l_{2}, \dots, l_{N} から  K 選んで総和をとる。

総和を取った値の最大値を求めよ。

制約

  •  1 \le K \le N \le 50

考えたこと

 N 個の整数  l_{1}, l_{2}, \dots, l_{N} を大きい順に並べておいて、大きい順に  K 個とって足せばよい。

C++ では、大きい順にソートするのは

sort(l.begin(), l.end(), greater<int>());

と書ける。

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, K;
    cin >> N >> K;
    vector<int> l(N);
    for (int i = 0; i < N; i++) cin >> l[i];

    sort(l.begin(), l.end(), greater<int>());
    int res = 0;
    for (int i = 0; i < K; i++) res += l[i];
    cout << res << endl;
}