-
1486. 장훈이의 높은 선반SWexpertAcademy 2019. 7. 15. 04:11
#include<cstdio> #include<vector> #include<iostream> using namespace std; int t; int n, b; int g[10000000]; int a[20]; void dfs(int i, int k, int j,int t,vector<int>&result,int temp) { if (temp >= 0) { result.push_back(temp); return; } if (i == t){ if (temp >= 0) { result.push_back(temp); } else return; } else { dfs(i + 1,k + a[i + 1],j,t,result, k - j); dfs(i + 1,k,j,t,result, k - j); } } int main() { cin >> t; for (int alp = 1; alp <= t; alp++) { vector<int> result; scanf("%d %d", &n, &b); for (int i = 0; i < n; i++) { cin >> a[i]; } dfs(0, 0,b,n,result,0 - b); dfs(0, a[0],b,n,result, a[0] - b); int min = result[0]; for (int i = 1; i < result.size(); i++) if (min > result[i]) min = result[i]; cout << "#" << alp << " " << min << endl; } return 0; }
브루트 포스 밖에 생각이안났고 그중에서 재귀가 제일 효과적일거같아서 재귀로했다
이용자 수 제한이 20명까지인걸 감안했을때 재귀로해도 메모리 문제없다고 판단함
근데 재귀함수 생성하는데, 인수로 조건 검사안하면 그냥 길이 n까지갔을때 총값들이 전부다 리턴되서 벡터에들어가는 불상사가생기는데
왜그런지 모르겠다 C++공부가 좀 부족한모양
'SWexpertAcademy' 카테고리의 다른 글
7699. 수지의 수지 맞는 여행 (0) 2019.07.20 5658. [모의 SW 역량테스트] 보물상자 비밀번호 (0) 2019.07.15 1221. [S/W 문제해결 기본] 5일차 - GNS (0) 2019.07.15 7733. 치즈 도둑 (0) 2019.07.14 7965. 퀴즈 (0) 2019.07.12