Suppose `n` indicates the scale of the problem, and `m` is the dimension of some attributes each involved item has. The `heuristics` function takes as input an `item_attr1` of shape (n,), an `item_attr2` of shape (n, m), and returns `heuristics` of shape (n,). `heuristics[i]` indicates how promising it is to include item i in the solution.