#include<bits/stdc++.h>
using namespace std;
const int N = 200000;
int n, m,ans=-1;
int a[N];
int count_one(int x)//计算1的个数
{
int cnt = 0;
for (int i = 0; i < n; i++)
{
if (x & (1 << i)) cnt++;
}
return cnt;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
sort(a, a + n);
bitset<N>bb;
bb[0] = 1;
for (int j = 0; j < n; j++)
{
bb = bb | bb << a[j];//加
}
for (int i = n - 1; i >= 0; i--)//减
bb = bb | bb >> a[i];
ans = max(ans, (int)bb.count());
cout << ans-1 << endl;
}
蓝桥杯 砝码称重 bitset
于 2022-04-04 20:24:32 首次发布
本文介绍了一种使用C++实现的高效算法,通过位操作计算整数中1的个数。首先定义了count_one函数,通过位与运算逐位累加1的个数。在main函数中,对输入数组进行排序并应用位运算技巧,求出最长连续子数组中1的个数,最终输出结果减一。
摘要由CSDN通过智能技术生成