前言
此题坑爹啊,描述上有误啊,不玩war3做不出来啊!
比赛时同学说这是道纯模拟,纯模拟我擅长啊,但是这一写就是300行啊,还没写完啊!就算写完也肯定不对啊,因为是按描述理解的啊!
但是这么坑爹的题,也有队伍过啊!一过还他么几十个队啊!OMG啊!坑爹啊!
题目大意
模拟魔兽争霸的装备购买行为。在游戏中,可以购买三种装备:
- 普通装备:每个普通装备占一个装备栏,可以直接购买。
- 合成装备:每个合成装备占一个装备栏,购买时需要有足够的材料和合成金。
- 消耗装备:多个同类型的合成装备占一个装备栏。
另外,还有一些规则上需要注意的地方:
- 当你的背包满时,你不能购买任何东西。
- 当你购买合成装备时,相应材料将会从装备栏中消失。
- 当一个操作非法时,现有装备和金钱不会出现任何变化。
- 刚开始时,你的金钱为0,没有任何装备。
- 金钱不能为负数。
思路
纯模拟题。题意稍微有些歧义,不玩war3的同学很难作对这道题。下面说些需要注意的地方:
首先,装备栏满时不可以购买普通装备,这个很正常。对于消耗型装备,装备栏满时,就算已拥有同类型装备,也不能继续购买。但是,合成装备却与以上两种装备不同,在装备栏满时,只要合成金和材料充足,就可以购买!这里就与题目描述相违了。但合成装备有一种特殊情况,就是会出现不需要任何材料的合成装备,这时在规则上可以将其视为普通装备。
因为本人基本没什么war3经验,特地请教了在这个领域里比较拔尖的同学,问其合成装备的材料能否是消耗型装备,得到回答是否,但这个回答让我wa了很久。杭电的测试数据中有用消耗型装备充当材料的情况,并且考虑到了“装备栏满时,消耗型装备数量大于合成需求量导致无法空出装备栏,结果没地方给合成装备”这样的情形。
关于物品价值方面,由于合成装备的材料可以是其他合成装备,因此求取物品价值是一个递归的过程。
代码
#include
#include
#include
测试数据
2
ring 1
sword 2
1
knife 3:
1
medicine 1
8
+100
+ring
+ring
+ring
+ring
+ring
+sword
+knife
2
ring 1
sword 2
1
knife 3: ring 2, sword 2
1
medicine 1
6
+100
+ring
+ring
+sword
+sword
+knife
2
ring 1
sword 2
1
knife 3: ring 2, sword 2
1
medicine 1
5
+100
+ring
+ring
+sword
+knife
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 3: ring 1, sword 1
1
medicine 1
9
+100
+ring
+ring
+ring
+ring
+sword
+sword
+knife
+kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, sword 1
1
medicine 1
9
+100
+ring
+ring
+sword
+sword
+knife
+knife
+sword
+kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, sword 1
1
medicine 1
10
+100
+ring
+ring
+sword
+sword
+knife
+knife
+sword
+kkk
-kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, medicine 2
1
medicine 1
11
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+medicine
+kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, medicine 2
1
medicine 1
12
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+medicine
+kkk
-kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, medicine 2
1
medicine 1
10
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, medicine 2
1
medicine 1
20
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+kkk
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+kkk
2
ring 1
sword 2
2
knife 3: ring 1, sword 1
kkk 2: knife 2, medicine 2
1
medicine 1
21
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+medicine
+kkk
+100
+ring
+ring
+sword
+sword
+knife
+knife
+medicine
+medicine
+kkk
2
ring 1
sword 2
1
knife 3: medicine 1
1
medicine 1
8
+100
+ring
+ring
+ring
+ring
+ring
+medicine
+knife
2
ring 1
sword 2
1
knife 3: medicine 1
1
medicine 1
9
+100
+ring
+ring
+ring
+ring
+medicine
+medicine
+ring
+knife
”杭电的测试数据中有用消耗型装备充当材料的情况,并且考虑到了“装备栏满时,消耗型装备数量大于合成需求量导致无法空出装备栏,结果没地方给合成装备”这样的情形。“
测过了,HDOJ的数据里没有将消耗型装备作为合成装备的材料的数据