https://www.acmicpc.net/problem/19942
19942번: 다이어트
식재료 N개 중에서 몇 개를 선택해서 이들의 영양분(단백질, 탄수화물, 지방, 비타민)이 일정 이상이 되어야 한다. 아래 표에 제시된 6가지의 식재료 중에서 몇 개를 선택해서 이들의 영양분의 각
www.acmicpc.net
[난이도] Gold5
[유형] 브루트포스
[풀이]
N이 15밖에 되지 않으므로 모든 경우의 수를 재귀함수를 이용해 다 해보면 됩니다.
#include <cstdio> #include <algorithm> #include <vector> using namespace std; struct P{ int p,f,s,v,c; }; int N,mp,mf,ms,mv,ansv=9e8; P a[15]; vector<int> vec,ans; void sol(int n,int p,int f,int s,int v,int c){ if(n==N){ if(p>=mp&&f>=mf&&s>=ms&&v>=mv){ if(ansv>c){ ans=vec; ansv=c; }else if(ansv==c && ans>vec){ ans=vec; ansv=c; } } return; } sol(n+1,p,f,s,v,c); vec.push_back(n); sol(n+1,p+a[n].p,f+a[n].f,s+a[n].s,v+a[n].v,c+a[n].c); vec.pop_back(); } int main(){ scanf("%d%d%d%d%d",&N,&mp,&mf,&ms,&mv); for(int i=0;i<N;i++){ scanf("%d%d%d%d%d",&a[i].p,&a[i].f,&a[i].s,&a[i].v,&a[i].c); } sol(0,0,0,0,0,0); if(ansv==9e8){ puts("-1"); return 0; } printf("%d\n",ansv); for(auto k : ans) printf("%d ",k+1); }
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold5/19942.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold5] 2011 : 암호코드 (C++) (0) | 2022.05.13 |
---|---|
[BOJ/백준][Gold1] 1509 : 팰린드롬 분할 (C++) (0) | 2022.05.13 |
[BOJ/백준][Platinum5] 2568 : 전깃줄 - 2 (C++) (0) | 2022.05.13 |
[BOJ/백준][Gold1] 1562 : 계단 수 (C++) (0) | 2022.03.27 |
[BOJ/백준][Gold5] 17265 : 나의 인생에는 수학과 함께 (C++) (0) | 2022.03.27 |