题目链接:
思路:一开始没思路,看大牛一博客也的。。。orz....为了方便处理给每一个装备一个标号,并记录价格和拥有数量,买不到的装备价格用一个特殊的数标记,然后对需要的装备进行递归处理,对于一件装备,如果已经拥有就直接用,如果没有就买,如果买不到就合成。数据保证需要的装备肯定能得到。
View Code Q; 55 for(int i=0;i >node[i].name>>node[i].price; 58 node[i].num=0; 59 } 60 m=n; 61 scanf("%d",&n); 62 for(int i=0;i >str>>x; 64 for(k=0;k >str; 77 Q.push(Find(str)); 78 cin>>str; 79 while(str!="="){ 80 cin>>str; 81 Q.push(Find(str)); 82 cin>>str; 83 } 84 cin>>str; 85 x=Find(str); 86 while(!Q.empty()){ 87 int y=Q.front(); 88 Q.pop(); 89 vet[x].push_back(y); 90 } 91 } 92 scanf("%d",&n); 93 int ans=0; 94 while(n--){ 95 cin>>str>>x; 96 ans+=Solve(Find(str),x); 97 } 98 printf("%d\n",ans); 99 }100 return 0;101 }
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 222 9 #define inf 1<<30 10 struct Node{ 11 string name; 12 int price,num; 13 }node[MAXN]; 14 int n,m,x,k; 15 string str; 16 vector vet[MAXN]; 17 18 int Find(string &str){ 19 for(k=0;k