P2622 关灯问题II
题意
给定n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯,按下了第i个按钮,对于所有的灯都会有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,当这盏灯是关的,把它打开,否则也不管;如果是0,无论这灯是否开,都不管。
现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。
n < = 10 , m < = 100 n<=10,m<=100 n<=10,m<=100
思路
用n位二进制数表示这n盏灯的状态,0为关,1为开。
则初始状态为 000000…000。
令 d p [ x ] dp[x] dp[x]表示得到 x x x这个状态需要按下按钮的最小次数,即有 d p [ 0 ] = 0 dp[0] = 0 dp[0]=0。
然后我们从状态0开始,依次按下每个按钮,得到其他状态y,当y状态第一次出现时,就得到了状态y的最小次数,即 d p [ y ] = d p [ x ] + 1 dp[y] = dp[x]+1 dp[y]=