기본적인 브루트 포스 문제이다.
#include <stdio.h>
#include <iostream>
using namespace std;
int card[105], picked[4], res = -1, m, card_num;
void doRecur(int idx, int pos) {
if (pos == 3) {
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += picked[i];
}
if (sum > res && sum <= m) res = sum;
return;
}
for (int i = idx; i < card_num; i++) {
picked[pos] = card[i];
doRecur(i + 1, pos + 1);
}
return;
}
int main() {
cin >> card_num >> m;
for (int i = 0; i < card_num; i++) cin >> card[i];
doRecur(0, 0);
cout << res << endl;
return 0;
}
card에 겹치는 수 처리를 해볼까 생각해봤지만 sort함수를 이용하여 겹치는 것을 찾는 것이 오히려 더 시간이 걸릴 것 같아서 그냥 그대로 했다.
백준 14888번 연산자 끼워넣기 C/C++ (0) | 2020.12.19 |
---|---|
백준 14502번 연구소 C (0) | 2020.12.15 |
백준 1436번 영화감독 숌 C++ (0) | 2020.12.12 |
백준 7568번 덩치 C++ (0) | 2020.12.11 |
백준 2231번 분해합 C++ (0) | 2020.12.11 |
댓글 영역