给你一个二进制数,,每一位有一个权值,让你转格雷码,求所对应格雷码位为1的权值的和:二进制位中的某些位为?,你需要给这些问号赋值使得到的和最大. 首先你得知道二进制转格雷码的规则,即格雷码位为[二进制位与左边前一位的异或值],格雷码首位为二进制首位: 因为格雷码首位为二进制首位,那么可以视二进制首位的左边前一位是0: 然后你就可以分情况模拟了: 1.连续数字的情况直接计算即可: 2.连续问号的情况需要dp一下:dp[k][j]表示第k个问号是j时,得到的最大和,那么dp[k][j] = max(…