想了一下解题思路
效果总共4种:克制,普通,抵抗,无效
=====================================================================
最终能明确属性的情况是:一种招式对4种属性造成4种不同效果
所以如果想要只用1种招式完成目标的话,属性总数必须≤4
想要只用2种招式完成目标的话,属性总数必须≤16(4²)
想要只用3种的话,属性总数必须≤64(4³)
……
而现在属性总数是18,所以针对单属性的话,理论上至少需要3个不同属性的招式
考虑双属性的话,将双属性看作一个全新的单属性,那么属性总数是171,理论上至少需要4个不同属性的招式(64≤171≤256)
======================================================================
但在实际情况中能否实现,则要看这4种效果的分布
即:①若某个属性对对18种属性拥有全部的4种效果,则把这4种效果分成4个集合,每个集合里的属性数量需要≤16,如果超过16个,则这个属性的招式理论上就不太适合用作测试;(全部属性都符合条件,龙系差一点就out)
②若某个属性的招式对18种属性只有3种效果,即只能分成3个集合,那么每个集合里的属性数量需要≤12(3×4),如果超过12个,则理论上不太适合用作测试;(一般系和恶系out)
③集合的属性数量越平均,则该属性越适合用来测试。
效果 克制 普通 抵抗 无效
一般 0 15 2 1
格斗 5 7 5 1
飞行 3 12 3 0
毒 2 11 4 1
地面 5 10 2 1
岩石 4 11 3 0
虫 3 11 7 0
幽灵 2 14 1 1
钢 3 11 4 0
火 3 11 4 0
水 3 12 3 0
草 3 8 7 0
电 2 12 3 1
超能 2 13 2 1
冰 4 10 4 0
龙 1 15 1 1
恶 2 13 3 0
妖精 3 12 3 0
飞压 5 7 5 1
冻干 4 12 2 0
综上,斗、地、岩、草、冰等属性都是不错的测试属性
===================================================================
如果是考虑双属性的情况呢?
总共171种防守属性和18种进攻属性
把18种进攻属性对171种防守属性的4种效果分别分成4个集合,每个集合里的属性数量需要≤64,若只有3种效果,则分成3个集合,每个集合里的属性数量需要≤48(4²×3),若超过这个数,则理论上不太适合用作测试。
效果 克制 普通 抵抗 无效
一般 0 120 33 18
格斗 50 53 50 18
飞行 42 87 42 0
毒 25 74 54 18
地面 65 65 23 18
岩石 54 78 39 0
虫 39 87 105 0
幽灵 31 107 15 18
钢 39 78 54 0
火 39 78 54 0
水 42 87 42 0
草 30 57 84 0
电 27 84 42 18
超能 29 95 29 18
冰 50 71 50 0
龙 16 121 16 18
恶 29 97 45 0
妖精 42 87 42 0
飞压 50 53 50 18
冻干 58 86 27 0
综上,除了格斗和地面,几乎没有哪个属性适合用作测试,而飞、毒、岩石、钢、火、水、冰、妖精是相对比较理想的选择。
然而这也仅仅停留在理论上而已,实际上是否真的能实现用4个属性招式测试出所有情况,还要考虑18种属性的4种效果在这171种属性中的重复度,在单属性问题中,这个重复度可以靠枚举法解决,但双属性太多了,目前没想到简便的思路。。。