■0201 Wrought Gold Master
DFS.あるアイテムについてそれ自身を買う,あるいはレシピを用いて錬金するという両手法を試し,最小を返す.
import java.util.*;
import java.lang.*;
import java.math.*;
import java.io.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
public class Main{
Scanner sc=new Scanner(System.in);
int INF=1<<28;
double EPS=1e-9;
int n, m;
HashMap<String, Integer> val;
HashMap<String, LinkedList<String>> recipe;
String item;
void run(){
for(;;){
val=new HashMap<String, Integer>();
recipe=new HashMap<String, LinkedList<String>>();
n=sc.nextInt();
if(n==0){
break;
}
for(int i=0; i<n; i++){
String s=sc.next();
int d=sc.nextInt();
val.put(s, d);
}
m=sc.nextInt();
for(int j=0; j<m; j++){
String s=sc.next();
int k=sc.nextInt();
LinkedList<String> list=new LinkedList<String>();
for(int i=0; i<k; i++){
String t=sc.next();
list.add(t);
}
recipe.put(s, list);
}
item=sc.next();
solve();
}
}
void solve(){
println(dfs(item)+"");
}
int dfs(String s){
int res=INF;
if(val.containsKey(s)){
res=min(res, val.get(s));
}
if(recipe.containsKey(s)){
int sum=0;
for(String t : recipe.get(s)){
sum+=dfs(t);
}
res=min(res, sum);
}
return res;
}
void debug(Object... os){
System.err.println(Arrays.deepToString(os));
}
void print(String s){
System.out.print(s);
}
void println(String s){
System.out.println(s);
}
public static void main(String[] args){
// System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
new Main().run();
}
}
0 件のコメント:
コメントを投稿