给定一个整数N,将其转换成多个2的幂次相加

例如: N = 200
N = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 73

  1. int N = 200;
  2. int[] res = new int[100];
  3. int k = 1, idx = 0;
  4. while (k <= N) {
  5. res[idx++] = k;
  6. N -= k;
  7. k *= 2;
  8. }

用途

多重背包的优化,将一个多重背包问题转换成01背包问题