第一题    以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