AOJ 0201 - Wrought Gold Master
stringとか絡むとうまく書けないの何とかしたい.
あるアイテムのレシピは1種類しかないが,その材料にもレシピがあるので,依存関係が面倒.
全部の値段を強引に更新するときは最大でも10^6なのでこれで十分.
#include<iostream> #include<map> struct Recipe{ int index, stuff[100], size; }; int main(){ int n; while(std::cin >> n, n){ std::map<std::string, int> indexes; int items[100];//items[index]: index番目の値段 for(int i=0;i<n;i++){ std::string name; int price; std::cin >> name >> price; indexes[name] = i; items[i] = price; } Recipe r[100];//recipe[n][0]には材料の数 int m; std::cin >> m; for(int i=0;i<m;i++){ std::string name; int stuff_n; std::cin >> name >> stuff_n; r[i].size = stuff_n; r[i].index = indexes[name]; for(int j=0;j<stuff_n;j++){ std::string stuff; std::cin >> stuff; r[i].stuff[j] = indexes[stuff]; } } while(true){ bool update = false; for(int i=0;i<m;i++){ int price = 0; for(int j=0;j<r[i].size;j++){ price += items[r[i].stuff[j]]; } if(price < items[r[i].index]){ items[r[i].index] = price; update = true; } } if(!update)break; } std::string want; std::cin >> want; std::cout << items[indexes[want]] << std::endl; } }