A minimum knapsack-based resource allocation for underlaying device-to-device communication. (2018)