现在有n个货物,第i个货物的重量是 2wi 。每次搬的时候要求货物重量的总和是一个2的幂。问最少要搬几次能把所有的货物搬完。
样例解释:
1,1,2作为一组。
3,3作为一组。
Input
单组测试数据。 第一行有一个整数n (1≤n≤10^6),表示有几个货物。 第二行有n个整数 w1,w2,...,wn,(0≤wi≤10^6)。
Output
输出最少的运货次数。
Input示例
样例输入1 5 1 1 2 3 3
Output示例
样例输出1 2
思路:2^3=2^2+2^2;
#include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int a[1100000]; int main() { int n, b, i, j; while(scanf("%d", &n) != EOF) { for(i = 0; i < n; i++) { scanf("%d", &b); a[b]++; } for(i = 0; i < 1100000; i++) { a[i+1] += a[i] / 2; a[i]= a[i] % 2; } int sum = 0; for(i = 0; i <1100000; i++) { if(a[i] == 1) { sum++; } } printf("%d\n", sum); } return 0; }