#include <iostream> #include <vector> using namespace std; int arr[100]; int n,m; vector<int> v; int maxSum = 0; void comb(int n, int r, int index) { if(r == 0) { int sum = 0; for(int i=0;i<v.size();i++) sum += v[i]; if(sum <= m && sum > maxSum) maxSum = sum; return; } else if(n == r) { int sum = 0; for(int i=0;i<n;i++) v.push_back(arr[i+index]); for(int i=0;i<v.size();i++) sum += v[i]; if(sum <= m && sum > maxSum) maxSum = sum; for(int i=0;i<n;i++) v.pop_back(); return; } v.push_back(arr[index]); comb(n-1,r-1,index+1); v.pop_back(); comb(n-1,r,index+1); return; } int main() { scanf("%d %d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&arr[i]); comb(n,3,0); printf("%d",maxSum); }
N<=100이여서 조합으로 풀 수 있을것 같다고 생각하여 조합을 이용해 해결하였습니다.
풀이과정은 조합 알고리즘에서 합이 m 이하이고 maxSum을 두어 m과 가장 가까운 수가 되도록 하는 원리를 적용한 것이기에 자세한 설명은 생략하겠습니다.
'Algorithm > Baekjoon & Algospot' 카테고리의 다른 글
[C++] BOJ 13016 - 내 왼손에는 흑염룡이 잠들어 있다 (0) | 2018.07.15 |
---|---|
[C++] BOJ 10822 - 더하기 (feat. how to convert string to int) (0) | 2018.04.02 |
[C++] BOJ 2178 - 미로 탐색 (0) | 2018.03.28 |
[C++]BOJ 1157 - 단어 공부 (0) | 2018.03.23 |
[C++] BOJ 2346 - 풍선 터뜨리기 (0) | 2018.03.22 |