# 12584 - The Beauty of Distributing ## 題意: 分配所有的數字成幾組, 每組的和都相同, 求最多幾組? ## 題解: 因為每組的和相同, 所以每組的和應該為sum/k sum = 數字總和, k = 組的數量 Best case: k = n, Worst case: k = 1 用迴圈去測試k, 如果sum/k不是整數就跳過 測試的方法用DFS, 如果使用完所有卷軸就回傳TRUE ## Code: ```cpp #include <stdio.h> #include <string.h> int t, n, a[15]; int level, vis[15]; int dfs(int number, int sum){ if(number == n) // used all the reels return 1; for (int i = 0; i < n; i++){ if(vis[i]) continue; vis[i] = 1; if(sum + a[i] < level){ // continue with current skill if(dfs(number + 1, sum + a[i])) return 1; } else if(sum + a[i] == level){ // start with new skill if(dfs(number + 1, 0)) return 1; } vis[i] = 0; } return 0; } int main(){ scanf("%d", &t); while(t--){ int sum = 0, ans = 1; scanf("%d", &n); for (int i = 0; i < n; i++){ scanf("%d", &a[i]); sum += a[i]; } for (int i = n; i > 1; i--){ if(sum % i != 0) // level is not integer continue; level = sum / i; memset(vis, 0, sizeof(vis)); if(dfs(0, 0)){ ans = i; break; } } printf("%d\n", ans); } return 0; } ``` ###### tags: `NTHUOJ`