프로그래밍겅부
1486. 장훈이의 높은 선반 (D4) 본문
고려사항
가장 낮은 탑의 크기와 선반의 높이의 차이로 정답을 구해야한다!
풀이 방법
무식하게 모든 경우의 수를 구했다. B명의 직원중 1명 뽑아서 해보고 2명 뽑아서 해보고 ...B-1 뽑아서 해보고 B명 뽑아서 모든 경우를 다 조사해보았더니 남들의 문제 풀이보다 훨씬 시간이 오래 걸리게되었다.
PASS가 나오긴 했지만 좀 가지치는 방법을 강구해보아야겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vector> #include<algorithm> using namespace std; int T, N, B; vector <int> imp; int cha= 9999; void hight() { vector <int> v; int size = imp.size(); for (int i = 1; i <= size; i++) { int num = size-i; v.clear(); for(int k = 0; k < num; k++) { v.push_back(0); } for (int k = 0; k < i; k++) { v.push_back(1); } do { int sum = 0; for (int vn = 0; vn < v.size(); vn++) { if (v[vn] == 1) { sum += imp[vn]; } } if (sum >= B) { int result = sum - B; cha = min(result, cha); } } while (next_permutation(v.begin(), v.end())); } } int main() { freopen("input.txt", "r", stdin); vector<int> ans; scanf("%d", &T); for (int testcase = 0; testcase < T; testcase++) { imp.clear(); cha = 9999; scanf("%d%d", &N, &B); for (int i = 0; i < N; i++) { int H; scanf("%d", &H); imp.push_back(H); } hight(); ans.push_back(cha); } for (int i = 0; i < ans.size(); i++) { printf("#%d %d\n" ,i + 1, ans[i]); } } | cs |
'알고리즘' 카테고리의 다른 글
1949. [모의 SW 역량테스트] 등산로 조성 (0) | 2018.11.08 |
---|---|
1824. 혁진이의 프로그램 검증 (0) | 2018.11.07 |
1767. [SW Test 샘플문제] 프로세서 연결하기 (0) | 2018.11.04 |