First of all, if you replace 10 by 2, you can solve this problem in linear time using a two-pointer algorithm: a pointer starts at the bottom of the array and the other moves as far as possible while keeping the average. below the threshold. Then you advance the first pointer by 1 and move the second one until the average is below the threshold. Etc. We notice that the same algorithm also works for a weighted average.

Given $ N $ numbers, you can divide them into two halves of $ N / 2 $ numbers ("meet in the middle"). Each series of 10 numbers is divided into one $ a $-set of the first half and a $ b $-set of the second half, for some $ a, b $ by summing to 10. We can run the algorithm above for all these $ a, b $ (using the appropriate weights). This will improve travel time to be proportional to $ binom {N} {10} $ to be proportional to $ binom {N / 2} {10} $ (for $ N geq $ 20).

You can try to improve this by dividing the halves randomly and hoping for a balanced split, which will occur with reasonable probability. Then just try $ a, b $ who are balanced. (The extreme would be to aim $ a = b = $ 5but this is not necessarily the best choice.) Although it is a randomized algorithm, it can probably be degraded by taking just a little bit of execution time.