DdoubleJ
2018. 8. 7. 23:22
DFS로 점원들의 키를 합치며, 가장 작은 값을 찾아낸다.
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 | #include <stdio.h> int key[21]; int b; int n; int min = 2e9; void dfs(int sum, int ptr) { if ((sum >= b)) { if (sum - b < min) min = sum - b; return; } for (int i = ptr + 1; i < n; i++) { dfs(sum + key[i], i); } } int main(void) { int T; scanf("%d\n", &T); for (int testCase = 1; testCase <= T; testCase++) { min = 2e9; scanf("%d%d", &n, &b); for (int i = 0; i < n; i++) scanf("%d", &key[i]); for (int i = 0; i < n; i++) { dfs(key[i], i); } printf("#%d %d\n", testCase, min); } return 0; } | cs |