これは私のCSクラスの1つの問題セットで、ちょっと行き詰まっています。これが問題の要約です。
Create a program that will:
1) take a list of grocery stores and its available items and prices
2) take a list of required items that you need to buy
3) output a supermarket where you can get all your items with the cheapest price
input: supermarkets.list, [tomato, orange, turnip]
output: supermarket_1
The list looks something like
supermarket_1
$2.00 tomato
$3.00 orange
$4.00 tomato, orange, turnip
supermarket_2
$3.00 tomato
$2.00 orange
$3.00 turnip
$15.00 tomato, orange, turnip
If we want to buy tomato and orange, then the optimal solution would be buying
from supermarket_1 $4.00. Note that it is possible for an item to be bough
twice. So if wanted to buy 2 tomatoes, buying from supermarket_1 would be the
optimal solution.
ここまでで、データセットを簡単に操作できるデータ構造に入れることができました。私は基本的にスーパーマーケットの辞書を持っており、値は各エントリからその価格へのマッピングを含む別の辞書を指します。
supermarket_1 --> [turnip --> $2.00]
[orange --> $1.50]
1 つの方法は、ブルート フォースを使用して、すべての組み合わせを取得し、解を満たすものを見つけて、最小のものを見つけることです。これまでのところ、これは私が思いつくことができるものです。2 つのアイテムの組み合わせの価格が、それぞれを個別に購入するよりも安くなるという仮定はありません。
提案のヒントは大歓迎です