第一题 以5为例 1 10 11 100 101 先计算出5的二进制位数,第一位 每两个有一个1,第二位 每4个有2个1,以此类推,加起来就行 第二题 dp[][] = new int[][2]; dp[0][0] = 0; dp[0][1] = num[0]; for i = 1; dp[i][0] = max(dp[i-1][1],dp[i-1][0]);//不取 dp[i][1] = dp[i-1][0]+num[i]; // 取 return max(dp[length-1][0],dp[length-1][1]); 第三题 注意结果用long