题目描述
给出一个长为 n 的序列 A1,A2,…,An
你需要将序列 A 划分成若干个连续段,一段的权值定义为这段内的所有数的按位或。
你需要恰当地选择划分方案,使得每段的权值之和最大。
求出每段的权值之和的最大值。
题目分析:首先题目要求的是n个整数划分之后的与运算,那么我们可以想打,两个数的和一定大于等于两个数的按位与,那么直接就把每个数都分层一个序列,所以最后权值之和就是数组每个数的和
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
ll a[maxn];
int main()
{
ll n, sum = 0;
scanf("%lld", &n);
for (int i = 1; i <= n; ++i)
scanf("%lld", &a[i]);
for (int i = 1; i <= n; ++i)
sum += a[i];
printf("%lld\n", sum);
} 
京公网安备 11010502036488号