주어진 카드들 중 입력으로 주어진 값을 넘지 않으면서 최대한 가까운 카드 3장의 합을 출력하는 문제이다. 이는 주어진 카드 중 3장을 뽑는 모든 경우를 돌며 가장 가까운 값을 찾는다.
#include <iostream>
#include <vector>
using namespace std;
int N, M;
vector<int> card;
int maxCard(int idx, int topick, int value) {
if(value > M) return 0;
if(topick == 0) return value;
int ret = 0;
for(int i = idx; i < card.size(); ++i){
ret = max(ret, maxCard(i+1, topick-1, value + card[i]));
}
return ret;
}
int main() {
cin >> N >> M;
for(int i=0;i<N;++i) {
int input;
cin >> input;
card.push_back(input);
}
cout << maxCard(0, 3, 0) << endl;
}