此题对于分析题意有这非常高的要求。
首先,我们考虑灯泡数量n的性质。我们假设m=k1+k2+k3+k4,k_i表示第i种操作的数目。我们观察一下规律:
- 灯泡1最终变化的次数是 k1+k2+k4,
- 灯泡2最终变化的次数是 k1+k3,
- 灯泡3最终变化的次数是 k1+k2.
- 灯泡4最终变化的次数是 k1+k3+k4.
- 灯泡5最终变化的次数是 k1+k3.
- 灯泡6最终变化的次数是 k1+k2.
从第7个灯泡开始,开始1-6的循环。所以我们可以知道,序号大于等于7的灯泡都没有自己独立的状态,完全取决于前6个灯泡的状态。当n>=6时,只要考察前6个灯泡里不同的状态数目就行了。
但是如果再仔细观察,灯泡4的变化次数是 k1+k3+k4,恰好是灯泡1-灯泡2+灯泡3,所以灯泡4的状态完全是由灯泡1~3的状态决定的,本身并不是一个自由变化的量。同理可以分析灯泡5也完全跟随灯泡2,灯泡6也完全跟随灯泡3,也都不是自由量。所以,n的考察范围其实只要限制在n<=3即可。
其次,我们考虑操作次数m的性质。在给出的四种操作里面,前三种操作有一个神奇的性质,任意两个操作的效果都等效于剩下的那个操作。另外,容易知道,两次相同的操作会相互对消。基于这两个原则,当m>=3时,任意给出m个操作的排列组合,最后都可以简化为这8种等效的操作组合:
0,1,2,3,4,1+4,2+4,3+4
顺便考虑一下m==2时,相当于有这几种操作的组合。
1+1,1+2,1+3,1+4,2+2,2+3,2+4,3+3,3+4,4+4
化简一下就是这7种等效的操作组合:
0,3,2,1+4,1,2+4,3+4
注意:没有等效于4的操作!
综上,对于m<=3,n<=3,穷举都不是问题。
当m==0时:没有操作,return 1.
当n==1时:m次操作,无非就是让第一个灯泡亮也可以使得其不亮。所以return 2.
当n==2时:m==1,return 3;m==2,对两个灯穷举前述(m==2)的操作组合,return 4.
当n==3时:m==1,return 4;m==2,对三个灯穷举两次操作的组合,return 7; m==3,对三个灯穷举三次操作的组合,return 8.