51Nod 1596 搬货物

来源:互联网 发布:日剧 商务 知乎 编辑:程序博客网 时间:2024/05/16 05:56
1596 搬货物



题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
 收藏
 关注

现在有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示例
样例输入151 1 2 3 3
Output示例
样例输出12
 思路: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;}


0 0