То, о чем вы спрашиваете, это, по сути, проблема k-ранца . На странице википедии, которая мне понравилась, есть множество ресурсов по ее решению. Однако эта проблема полностью решается NP-Complete, поэтому вам, возможно, захочется найти решение, близкое к лучшему, через имитированный отжиг или другие формы для поиска в пространстве проблемы.
Первое, что нужно помнить, это то, что в случае проблем с ограничениями вам, вероятно, понадобится немало времени, чтобы найти решение. В вашем предыдущем примере, хотя пять товаров и десять магазинов кажутся маленькими, на самом деле это создает большое проблемное пространство (порядка 1e5, не считая дополнительного усложнения условного ценообразования, которое еще больше поглощает проблему).
Проблема заключается в том, что вы покупаете по одному предмету. Целью является минимальная цена. Я думаю, то, что у вас есть, довольно хорошо, хотя я не слишком уверен в пунктах пули один и два.
каждая цена "p xy" определяется в домене (0, c), где c - цена товара в этом магазине
только одна цена в строке должна быть ненулевой
Я бы посчитал, что амортизация доставки будет превышать стоимость купленных товаров, а не добавляться к общей стоимости при выполнении расчетов.