题目描述
给出一个长为 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); }