Balanced weight distribution into buckets, but with a twist (aka sharding a list into k even shards)
Yes, this can be solved as a straightforward application of dynamic programming, once you define an objective function to measure how "evenly divided" the buckets are.  Let $A[j]$ denote the value of the objective function for the best way to split integers 1..j.  Then you can compute the value of $A[j]$ given the values of $A[1],\dots,A[j-1]$ (you just consider all possibilities for how many integers go in the last bucket), so there is a dynamic programming algorithm with running time at most $O(n^2)$.

This problem is sometimes called the Linear Partition Problem, and a solution can be found in Section 8.5 of Skiena's "Algorithm Design Manual".